好吧,我想也许有too much有关温莎城堡的信息,因为寻找这些关键字可以为我提供所有内容的示例,坦率地说,我不太了解它如何工作以正确解决此问题。我已经尝试了很多排列,但运气不佳。
我有一个IUnitOfWorkFactory
我想实例化为单例。因此,我安装了温莎城堡,编写了一些代码,如下所示:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
这是从我的电话中调用的Application_Start
method.
我有一个AccountController
像这样接线:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
...据我所知,这应该只是“工作”(尽管不要问我如何)。但当我尝试使用它时,我的属性始终为空。
似乎我错过了一些愚蠢而简单的东西,但我不知道它是什么。
我也尝试过
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
没有成功。
我究竟做错了什么?
结论
我在这里错过了几个步骤。我已经根据以下内容构建了一个安装程序和一个引导程序tutorial,但在构建控制器工厂之前,我在错误的位置注册了我的服务。现在我的引导程序看起来像这样:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
...我的属性注入不再为空...现在我只需要调试其他 87 个问题...