2010-10-23 28 views
28

Türün NO PARAMETER yapıcısına sahip olmadığı kapsayıcıyla nasıl yazılırım.Nasıl kayıt bir PARAMETER kurucu ile yazın?

Aslında yapıcım bir dizeyi kabul eder ve normalde bir Yolu temsil eden bir dizeyi iletirim.

Bu sorunu çözdüğümde, otomatik olarak yeni bir tür oluşturur, ancak bir dizeyi iletir?

cevap

52

Bu basit. Kurucuyu kaydettiğinizde, parametre için enjekte edilen değeri iletmeniz yeterlidir. Kap, yapıcınızı, değerin (API) veya parametre adının (XML) türüne göre eşleştirir.

API, sen yapardın: Tek bir dize alır ve çözmek anda yapıcı seçecektir

container.RegisterType<MyType>(new InjectionConstructor("My string here")); 

dize "Benim buradaki dizesini" geçecek.

eşdeğer XML (2.0 yapılandırma şemasını kullanarak) olacaktır: connectionString kullanılacak veritabanı bağlantı dizesi nerede olduğunu da InjectionConstructor ve ResolvedParameter inşa kullanabilirsiniz

<register type="MyType"> 
    <constructor> 
    <param name="whateverParameterNameIs" value="My string here" /> 
    </constructor> 
</register> 
+0

Teşekkürler, sadece ihtiyacım olan şey. – Martin

14

.

// install a named string that holds the connection string to use 
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager()); 

// register the class that will use the connection string 
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString"))); 

var context = container.Resolve<MyNamespace.MyObjectContext>(); 

Hatta bir adım daha ileri götürün ve her biri farklı veritabanlarına kendi bağlantı dizesini kullanarak, MyObjectContext birden adlandırılmış örnekleri olabilir.

İlgili konular