C# 从不同的未引用程序集中注册协定存储库

C# 从不同的未引用程序集中注册协定存储库,c#,.net,asp.net-mvc,dependency-injection,castle-windsor,C#,.net,Asp.net Mvc,Dependency Injection,Castle Windsor,我有单独的项目 存储库的合同接口 合同的存储库实现 BusinessContracts用于业务的接口 BusinessContracts的业务实现 仅Web业务合同将被引用-MVC项目 Castle windsor安装在Web项目中。 我想注册所有依赖项合同、业务合同等。。在web项目安装程序中。但是,如果不在web项目中添加引用,我就无法做到这一点 我不想仅仅为了注册依赖项而向我的web项目添加任何不必要的/额外的引用 那么,我应该采取什么方法和如何做到这一点呢? 1.在DLL中有单独的安装程

我有单独的项目

存储库的合同接口 合同的存储库实现 BusinessContracts用于业务的接口 BusinessContracts的业务实现 仅Web业务合同将被引用-MVC项目 Castle windsor安装在Web项目中。 我想注册所有依赖项合同、业务合同等。。在web项目安装程序中。但是,如果不在web项目中添加引用,我就无法做到这一点

我不想仅仅为了注册依赖项而向我的web项目添加任何不必要的/额外的引用

那么,我应该采取什么方法和如何做到这一点呢? 1.在DLL中有单独的安装程序。但是如何调用ohter安装程序而不参考程序集。 2.或者在web项目的1个安装程序中注册所有依赖项

我已经尝试了这两种方法,但是在没有程序集引用的情况下,我无法注册

正在寻找解决方案。
谢谢。

您必须将这些引用添加到web项目中。这个解决方案没有什么坏处,因为web项目是应用程序的根,它的执行从这里开始。所以,继续向web项目添加引用。这就是DI在此类应用程序中的工作方式


在每个应用程序中都有一个解决所有依赖关系的地方。它可以是控制台应用程序中的主要方法,也可以是WPF应用程序中的其他位置。在ASP.NETMVC中,这里是控制器工厂。从这一点开始执行应用程序逻辑。在运行时创建控制器实例时,应该解析其所有依赖项,但DI容器无法解析不可访问的类型。因此,您需要在mvc项目的根应用程序中引用所有必需的程序集

如果您使用构建步骤将未引用的assembiles复制到Web项目输出文件夹,则可以让Castle Windsor完成其余工作

windsorContainer.Install(FromAssembly.Named("SomeAssembly"));

Castle Windsor将在SomeAssembly.dll中找到安装程序,并为您注册组件。这要求您在其他程序集中引用Castle Windsor。

依赖项注入在插件技术中得到高度使用。尽管如此,我不同意必须在设计时引用程序集。看看。

您可以使用IWindsorInstaller界面在每个需要的项目中创建安装程序。然后在开始调用程序集(如web项目中的app start)时,使用

IWindsorContainer container = new WindsorContainer();
container.Install(FromAssembly.InThisApplication());

这对您很有用。

程序集引用有什么问题?插件是一种非常特殊的情况。除了特定的需求之外,没有必要在根项目中避免引用。无论如何,您需要项目中解析所有类型的程序集的名称或路径。与直接引用程序集相比,有什么优势?@ArtemPrudnikov说到你的观点,没有优势。我只是不同意必须使用程序集。好吧,也许我用错了这个词。我的意思是,在应用程序需要相反的程序集之前,可以引用程序集