Castle Windsor IoC Property Injection proste instrukcje
OK myślę, że może jestzbyt wiele informacje o zamku 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, aby prawidłowo rozwiązać ten problem. W tym momencie próbowałem kilku permutacji przy odrobinie szczęścia.
mamIUnitOfWorkFactory
że chcę utworzyć instancję jako singleton. Więc instaluję Castle Windsor, napisz trochę kodu w ten sposób:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
To się nazywa z mojegoApplication_Start
metoda.
mamAccountController
połączony tak:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
... o ile mogę to zrozumieć, powinno to po prostu „działać” (chociaż nie pytaj mnie jak). Ale moja własność jest zawsze null, gdy próbuję go użyć.
Wygląda na to, że tęsknię za czymś głupim i prostym, ale nie mam pojęcia, co to jest.
Próbowałem też
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
bez powodzenia.
Co ja robię źle?
WNIOSEK
Brakowało mi tutaj kilku kroków. Zbudowałem instalator i program ładujący na komputerseminarium, ale zarejestrowałem swoje usługi w niewłaściwym miejscu ... przed zbudowaniem fabryki kontrolerów. Teraz mój bootstraper wygląda tak:
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 z własności nie były już puste ... teraz muszę debugować pozostałe 87 problemów ...