Castle Windsor IoC Property Injection simples como fazer
OK, acho que talvez hajademais informações sobre Castle Windsor porque procurar por essas palavras-chave me dá exemplos de tudo e, francamente, não entendi o suficiente sobre como isso funciona para solucionar isso adequadamente. Eu tentei algumas permutações com pouca sorte neste momento.
eu tenho umIUnitOfWorkFactory
que quero instanciar como singleton. Então, eu instalo o Castle Windsor, escrevo um pouco de código assim:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
Isso é chamado da minhaApplication_Start
método.
eu tenho umAccountController
com fio assim:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
... tanto quanto eu posso imaginar, isso deve apenas "funcionar" (embora não me pergunte como). Mas minha propriedade é sempre nula quando tento usá-la.
Parece que estou sentindo falta de algo bobo e simples, mas não tenho ideia do que é.
Eu também tentei
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
sem sucesso.
O que estou fazendo de errado?
CONCLUSÃO
Eu estava faltando vários passos aqui. Eu tinha construído um instalador e um bootstrapper portutorial, mas eu registrei meus serviços no local errado ... antes de construir a fábrica do controlador. Agora meu bootstrapper se parece com isso:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
... e minhas injeções de propriedade não eram mais nulas .... agora eu só tenho que depurar os outros 87 problemas ...