加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:41:59 所属栏目:百科 来源:网络整理
导读:好吧我觉得关于Castle Windsor的信息可能太多了,因为寻找这些关键字给了我一切的例子,坦率地说,我对它如何正确解决这个问题的理解不够.在这一点上,我尝试了很少的运气. 我有一个IUnitOfWorkFactory,我想将其实例化为单例.所以,我安装了Castle Windsor,写了一
好吧我觉得关于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.一旦控制器被容器注册并解析,一切都应该按预期工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读