6

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 ...

+0

Czy zarejestrowałeś swój kontroler? –

+0

... 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ć. –

+0

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). –

Odpowiedz

6

Zarówno konstruktor i mienia wtrysk, gdy obiekt główny zostanie rozwiązany przez kontener. W takim przypadku twój obiekt AccountController będzie głównym obiektem, który Windsor musiałby utworzyć.

Aby to połączyć, należy użyć numeru controller factory. Po zarejestrowaniu kontrolera i rozwiązaniu go przez kontener, wszystko powinno działać zgodnie z oczekiwaniami.

+0

Właściwie to był początkowy tutorial, od którego zacząłem, a ja już zbudowałem tę fabrykę kontrolerów ... ale to nic nie robi.Mam też instalator ... nadal nic. –

+0

OK, to i komentarz Charleha mnie do tego, co robiłem źle. Napiszę to na moje pytanie. Dzięki! –

Powiązane problemy