C# 向castle windsor注册来自未引用程序集的类
我已经将我所有的温莎安装程序与他们自己的IOC组件解耦。可以像这样从未引用的程序集中注册类型C# 向castle windsor注册来自未引用程序集的类,c#,castle-windsor,C#,Castle Windsor,我已经将我所有的温莎安装程序与他们自己的IOC组件解耦。可以像这样从未引用的程序集中注册类型 container.Register( Classes .FromAssemblyNamed("MyProject.Web") .BasedOn<IController>() .LifestylePerWebRequest(), Classes .FromAssemblyNamed("MyProject.Web
container.Register(
Classes
.FromAssemblyNamed("MyProject.Web")
.BasedOn<IController>()
.LifestylePerWebRequest(),
Classes
.FromAssemblyNamed("MyProject.Web")
.BasedOn<IBaseHttpModule>()
.LifestylePerWebRequest()
);
container.Register(
班级
.FromAssemblyNamed(“MyProject.Web”)
.BasedOn()
.LifestylePerWebRequest(),
班级
.FromAssemblyNamed(“MyProject.Web”)
.BasedOn()
.LifestylePerWebRequest()
);
目前这对我来说还不错,但我想明确说明模块注册的顺序
我尝试了以下方法,但发现这无法工作,因为我的IOC dll中无法引用MyProject.Web,因为这将创建循环依赖关系
container.Register(
Component
.For<IBaseHttpModule>()
.ImplementedBy(Type.GetType("MyProject.Web.Modules.AuthenticationModule, MyProject.Web"))
.LifestylePerWebRequest()
);
container.Register(
组成部分
.对于()
.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()
container.Register(
班级
.FromAssemblyName(“MyProject.Web”)。其中(t=>t.FullName==“MyProject.Web.Modules.AuthenticationModule”)。
.BasedOn()
.LifestylePerWebRequest()
您可以在未引用的程序集中创建一个安装程序,然后让Castle Windsor按如下方式拾取它:
container.Install(FromAssembly.Named("MyProject.Web"));
我认为这是一种更干净的方法,因为你不需要在另一个程序集中注册实现,它们自己做。是的,我打赌这会起作用。我已经做过这样的事情来选择所有以服务结束的类。谢谢!我测试它时会标记为正确。我接受你的观点,但我讨厌所有的安装程序这也是我过去做过的事情。这意味着每个组件都有自己的“温莎安装程序”并负责在IoC要求时自行安装。我非常喜欢安装程序位于实现旁边的事实。这也意味着如果您与完全不同的团队共享组件/模块,则其中会附带特定的温莎安装程序。如果您愿意,可自行安装。但尼尔的观点仍然有效,这可能是一个p问题参考资料。