gpt4 book ai didi

c# - CaSTLe Windsor IoC 属性注入(inject)简单操作方法

转载 作者:太空狗 更新时间:2023-10-29 21:28:27 25 4
gpt4 key购买 nike

好吧,我认为关于 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 构建了一个安装程序和一个 Bootstrap ,但我在错误的地方注册了我的服务......在建立 Controller 工厂之前。现在我的 Bootstrap 看起来像这样:

iocContainer = new WindsorContainer()
.Install(FromAssembly.This());

var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);

iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);

...我的属性注入(inject)不再为空...现在我只需要调试其他 87 个问题...

最佳答案

当容器解析根对象时,构造函数和属性注入(inject)都会起作用。在这种情况下,您的 AccountController 将是 Windsor 需要创建的根对象。

为了连接起来,你应该使用 controller factory .一旦容器注册并解析了 Controller ,一切都应该按预期工作。

关于c# - CaSTLe Windsor IoC 属性注入(inject)简单操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com