Jer*_*acs 6 c# asp.net-mvc dependency-injection castle-windsor inversion-of-control
好吧我觉得关于Castle Windsor的信息可能太多了,因为寻找这些关键字给了我一切的例子,坦率地说,我对它如何正确解决这个问题的理解不够.在这一点上,我尝试了很少的运气.
我有一个IUnitOfWorkFactory我想要实例化为单身人士.所以,我安装了Castle Windsor,写了一些像这样的代码:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
Run Code Online (Sandbox Code Playgroud)
这是从我的Application_Start方法调用的.
我有这样的AccountController接线:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
......据我所知,这应该只是"工作"(虽然不要问我怎么做).但是当我尝试使用它时,我的属性总是为null.
好像我错过了一些愚蠢而简单的东西,但我不知道它是什么.
我也试过了
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
Run Code Online (Sandbox Code Playgroud)
没有成功.
我究竟做错了什么?
结论
我在这里错过了几个步骤.我根据教程构建了一个安装程序和一个bootstrapper ,但是在构建控制器工厂之前,我在错误的位置注册了我的服务.现在我的引导程序看起来像这样:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
Run Code Online (Sandbox Code Playgroud)
......我的房产注射不再是空的......现在我只需要调试其他87个问题......
| 归档时间: |
|
| 查看次数: |
13290 次 |
| 最近记录: |