c# – Castle Windsor IoC Property Injection简单的操作方法

前端之家收集整理的这篇文章主要介绍了c# – Castle Windsor IoC Property Injection简单的操作方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧我觉得关于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>();

这是从我的Application_Start方法调用的.

我有一个AccountController连线如下:

public class AccountController : SecureController
{
    public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
    ...

……据我所知,这应该只是“工作”(虽然不要问我怎么做).但是当我尝试使用它时,我的属性总是为null.

好像我错过了一些愚蠢而简单的东西,但我不知道它是什么.

我也试过了

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个问题……

解决方法

当容器解析根对象时,构造函数属性注入都起作用.在这种情况下,yourAccountController将是Windsor需要创建的根对象.

为了进行连接,您应该使用controller factory.一旦控制器被容器注册并解析,一切都应该按预期工作.

原文链接:https://www.f2er.com/csharp/244535.html

猜你在找的C#相关文章