OK Myślę, że jest może za dużo informacji o Castle Windsor, ponieważ szukanie tych słów kluczowych daje mi przykłady wszystkiego, i szczerze mówiąc nie rozumiem wystarczająco, jak to działa prawidłowo rozwiązać ten problem. Wypróbowałem kilka permutacji przy odrobinie szczęścia w tym momencie.Castle Windsor IoC Property Injection proste how-to
Mam IUnitOfWorkFactory
, które chcę utworzyć jako singleton. Więc zainstalować Zamek Windsor, napisać kawałek kodu tak:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
ta jest wywoływana z mojej metody Application_Start
.
Mam AccountController
przewodowe się tak:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
... o ile mogę zrozumieć, to należy po prostu „praca” (choć nie pytaj mnie jak to zrobić). Ale moja własność jest zawsze pusta, gdy próbuję jej użyć.
Wygląda na to, że brakuje mi czegoś głupiego i prostego, ale nie mam pojęcia, co to jest.
Próbowałem również
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
bez powodzenia.
Co robię źle?
WNIOSEK
mi brakuje tutaj kilku etapów. Zbudowałem instalator i bootstrappera na tutorial, ale zarejestrowałem swoje usługi w niewłaściwym miejscu ... przed zbudowaniem fabryki kontrolerów. Teraz moja inicjującego wygląda następująco:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
... i moje zastrzyki własności nie były już zerowa .... teraz mam tylko do debugowania pozostałe 87 problemy ...
Czy zarejestrowałeś swój kontroler? –
... Czy nie byłoby to konieczne tylko w przypadku wstrzyknięcia zależności od konstruktora? Być może nie rozumiem, jak to ma działać. –
Nie, kontener musi utworzyć katalog główny wykresu obiektu. W tym przypadku kontroler. Dotyczy to zastrzyku właściwości lub konstruktora (ponieważ działają one w ten sam sposób). –