好的,我认为关于温莎城堡的信息可能太多了,因为寻找这些关键字给了我所有的例子,坦率地说,我对如何正确解决这个问题的理解不够。在这一点上,我已经尝试了很多排列,但运气不佳。
我有一个IUnitOfWorkFactory
我想实例化为单例的。所以,我安装了 Castle Windsor,写了一些代码,如下所示:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
Application_Start
这是从我的方法中调用的。
我有一个AccountController
这样的接线:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
...据我所知,这应该只是“工作”(尽管不要问我如何)。但是当我尝试使用它时,我的属性始终为空。
似乎我错过了一些愚蠢而简单的东西,但我不知道它是什么。
我也试过
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
没有成功。
我究竟做错了什么?
结论
我在这里错过了几个步骤。我按照教程构建了一个安装程序和一个引导程序,但是我在错误的位置注册了我的服务......在构建控制器工厂之前。现在我的引导程序看起来像这样:
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 个问题...