使用温莎城堡从未引用的程序集注册类
本文关键字:引用 程序集 注册 城堡 | 更新日期: 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"));
我认为这是一种更干净的方法,因为您不处理在另一个程序集中注册实现,而是他们自己做。