0

我已经将我所有的 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()
                );

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

4

3 回答 3

2

你有没有尝试过这样的事情

container.Register(
Classes
    .FromAssemblyNamed("MyProject.Web").Where(t => t.FullName == "MyProject.Web.Modules.AuthenticationModule").
    .BasedOn<IBaseHttpModule>()
    .LifestylePerWebRequest()
于 2013-09-10T19:52:41.257 回答
0

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

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

我认为这是一种更清洁的方法,因为您无需处理在另一个程序集中注册实现,它们自己完成。

于 2013-09-10T20:34:12.373 回答
0

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

于 2013-09-10T19:10:49.047 回答