2013-09-23 21 views
5

kullanarak derleme zamanında bilinmeyen keyfi bir Tip bir saplama nesnesi oluşturmak için. Mümkün mü? Ben autofixture ile çalıştı:böyle nasıl yapıcı parametrenin türünü alabilirsiniz AutoFixture

public TObject Stub<TObject>() 
{ 
    Fixture fixture = new Fixture(); 
    return fixture.Create<TObject>(); 
} 

.. ama çalışmıyor:

Type type = parameterInfo.ParameterType; 
var obj = Stub<type>();//Compile error! ("cannot resolve symbol type") 

bana yardım eder misin? Kendinizi sık sık bu ihtiyacı bulursanız @meilke ile bağlı blog post gibi

var fixture = new Fixture(); 
var obj = new SpecimenContext(fixture).Resolve(type); 

sen bunu içine alabilir, işaret:

+0

Otomatik düzeltmenin genel olmayan bir API'si var mı? Yansıma ('Type') ve generics (' '') arasında geçiş yapmak… biraz ağrılı (ve yavaş) - yapabilirsin * (daha fazla yansıma ile) - ama mümkün olan en iyi şekilde kaçınılmaz .. –

+1

AutoFixture, bu sorun için kolay bir çözüm sağlamaz gibi görünüyor: http://thomasardal.com/non-generic-createanonymous-method-for-autofixture/ – meilke

+0

Yine de Type ile saplama oluşturmak mümkün mü? (otomatik sabitleme ile veya olmadan) – user2598794

cevap

10

AutoFixture nesneler oluşturmak için bir genel olmayan API, albeit kind of hidden (by design) var uzatma yöntemi:

public object Create(this ISpecimenBuilder builder, Type type) 
{ 
    return new SpecimenContext(builder).Resolve(type); 
} 

verir sadece gerekenler:

var obj = fixture.Create(type);