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

标签 c# asp.net-mvc dependency-injection inversion-of-control 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 构建了一个安装程序和一个 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/

相关文章:

java - @Bean 和 @Autowired 的区别

c# - 如何在主容器中注册类型,但在子容器中解析?

c# - Windows 的优雅编程关闭

asp.net - 在 ASP.NET Core 中检测移动设备

java - play 2.5 生产模式无法在应用程序启动时运行的 Singleton 类中使用注入(inject)的 ConfigurationProvider 类对象

asp.net-mvc - ASP.NET Core - 在 Linux 上部署时日期条目格式发生变化

asp.net - MVC4移动框架

c# - 在 ASP.NET Core 中获取当前星期几

c# - Lambda 表达式委托(delegate)强类型与弱类型隐式转换方法

c# - 如何在不知道更新了哪些字段的情况下处理更新实体?