使用温莎城堡从未引用的程序集注册类

本文关键字:引用 程序集 注册 城堡 | 更新日期: 2023-09-27 18:30:46

我已经将所有温莎安装程序解耦到他们自己的IOC程序集。 可以像这样从未引用的程序集注册类型。

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

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

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

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

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

使用温莎城堡从未引用的程序集注册类

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

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

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

您可以在未引用的程序集中创建安装程序,然后让温莎城堡像这样拾取它:

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

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