繁体   English   中英

使用城堡windsor从未引用的程序集中注册一个类

[英]Registering a class from an unreferenced assembly with castle windsor

我已经将所有的windsor安装程序与他们自己的IOC组件分离。 可以从未引用的程序集中注册类型。

container.Register(
    Classes
        .FromAssemblyNamed("MyProject.Web")
        .BasedOn<IController>()
        .LifestylePerWebRequest(),

    Classes
        .FromAssemblyNamed("MyProject.Web")
        .BasedOn<IBaseHttpModule>()
        .LifestylePerWebRequest()
    );

这对我来说很好,但我想明确说明我的模块注册的顺序。

我已经尝试了以下但是已经认为这不起作用,因为MyProject.Web无法在我的IOC dll中引用,因为这会创建循环依赖。

        container.Register(
            Component
                .For<IBaseHttpModule>()
                .ImplementedBy(Type.GetType("MyProject.Web.Modules.AuthenticationModule, MyProject.Web"))
                .LifestylePerWebRequest()
                );

有没有办法让这种东西与windsor一起工作,我在对象浏览器中搜索了文档和dll,但我没有找到任何看起来像是我的解决方案。

你尝试过这样的事吗?

container.Register(
Classes
    .FromAssemblyNamed("MyProject.Web").Where(t => t.FullName == "MyProject.Web.Modules.AuthenticationModule").
    .BasedOn<IBaseHttpModule>()
    .LifestylePerWebRequest()

使用安装程序工厂来控制注册顺序。

你可以在未引用的程序集中创建一个安装程序,然后让Castle Windsor选择它:

container.Install(FromAssembly.Named("MyProject.Web"));

我认为这是一种更简洁的方法,因为你不处理在另一个程序集中注册实现,他们自己做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM