6

Tamam Bence bu Windsor Logan hakkında bilgi çok fazla olduğunu düşünüyorum çünkü bu anahtar kelimeler arıyor bana her şeyi örnekler verir ve açıkçası nasıl çalıştığını hakkında yeterince anlamadım Bunu düzgün bir şekilde sorun. Bu noktada çok az şansla çok az permütasyon denedim.Castle Windsor IoC Mülk Enjeksiyon basit nasıl yapılır

Tekil olarak oluşturmak istediğim bir IUnitOfWorkFactory sahibim.

iocContainer = new WindsorContainer() 
    .Install(FromAssembly.This()); 

var propInjector = iocContainer.Register(
    Component.For<IUnitOfWorkFactory>() 
    .LifestyleSingleton() 
    .Instance(new NHUnitOfWorkFactory()) 
    ); 

propInjector.Resolve<IUnitOfWorkFactory>(); 

Bu benim Application_Start yöntemle çağrılan: Yani, şöyle kod biraz yazma, Kale Windsor yükleyin.

Ben

şöyle kadar kablolu bir AccountController var:

public class AccountController : SecureController 
{ 
    public IUnitOfWorkFactory UnitOfWorkFactory { get; set; } 
    ... 

... bildiğim kadarıyla anlamaya gibi, bu should sadece "iş" (nasıl diye sorma rağmen). Ama kullanmaya çalıştığımda mülküm her zaman boş.

Görünüşe göre, aptalca ve basit bir şeyi özlüyorum, ama ne olduğu hakkında hiçbir fikrim yok.

Ben de hiçbir başarı ile

var propInjector = iocContainer.Register(
    Component.For<IUnitOfWorkFactory>() 
    .ImplementedBy<NHUnitOfWorkFactory>() 
    .LifestyleSingleton() 
    ); 

çalıştılar.

Neyi yanlış yapıyorum?

SONUÇ

Burada çeşitli adımlar eksikti. tutorial'a göre bir yükleyici ve bir önyükleyici inşa ettim, ancak denetleyici fabrikalarını kurmadan önce hizmetlerimi yanlış noktaya kaydettim.

+0

Denetleyicinizi kaydettiniz mi? –

+0

... Bu sadece kurucu bağımlılığı enjeksiyonu için gerekli olmaz mıydı? Belki bunun nasıl çalışması gerektiğini yanlış anladım. –

+0

Hayır, kapsayıcı, nesne grafiğinin kökünü oluşturmalıdır. Bu durumda kontrolör. Bu, Mülk veya Yapıcı enjeksiyonu için geçerlidir (çünkü aynı şekilde çalışırlar). –

cevap

6

Hem yapıcı ve mülkiyet ... şimdi sadece diğer 87 ilgli sorunlarla zorunda ....

iocContainer = new WindsorContainer() 
    .Install(FromAssembly.This()); 

var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel); 
ControllerBuilder.Current.SetControllerFactory(controllerFactory); 

iocContainer.Register(
    Component.For<IUnitOfWorkFactory>() 
    .ImplementedBy<NHUnitOfWorkFactory>() 
    .LifestyleSingleton() 
    ); 

... ve mülkiyet enjeksiyonları artık boş idi: Artık benim bootstrapper şöyle Kök nesne kapsayıcı tarafından çözümlendiğinde, enjeksiyon çalışması. Bu durumda, AccountController, Windsor'un yaratması gereken kök nesne olacaktır.

Bunu bağlamak için bir controller factory kullanmalısınız. Denetleyici konteyner tarafından kaydedilip çözüldüğünde, her şey beklediğiniz gibi çalışmalıdır.

+0

Aslında bu, başlangıçta başlattığım öğreticiydi ve zaten bu denetleyici fabrikasını oluşturdum ... ama bu hiçbir şey yapmıyor gibi görünüyor.Yükleyicim de var ... hala hiçbir şey. –

+0

Tamam, bu ve Charleh'in yorumu, yanlış yaptığım şeyi açıkladı. Sorumu yazacağım. Teşekkürler! –

İlgili konular