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

本文关键字:注册 存储 程序集 引用 | 更新日期: 2023-09-27 18:36:23

>我有单独的项目

  1. 合约(存储库接口)
  2. 存储库(合同的实现)
  3. 业务合同(业务接口)
  4. 业务
  5. (业务合同的实施)
  6. Web(仅引用商业合同 - MVC 项目)

温莎城堡安装在Web项目中。我想注册所有依赖项(合同、商业合同等)。 在 Web 项目安装程序中。但是,如果不在 Web 项目中添加引用,我就无法做到这一点。

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

那么,我应该采取什么方法以及如何做到这一点?1.在dll中具有单独的安装程序。(但是如何在不引用程序集的情况下调用其他安装程序)。2.或在Web项目中的1个安装程序中注册所有依赖项。

我已经尝试了这两种方法,但无效,如果没有程序集引用,我无法注册。

寻找解决方案。谢谢。

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

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

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

如果使用生成步骤将未引用的程序集复制到 Web 项目输出文件夹,则可以使温莎城堡执行其余工作。

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

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

依赖注入与插件技术高度配合使用。 话虽如此,我不同意必须在设计时引用程序集。 看看如何在使用反射加载的程序集中使用 Castle.Windsor。

您可以根据需要在每个项目中创建安装程序(使用 IWindsorInstaller 界面)。 然后在调用程序集开始时(如 Web 项目中的应用程序启动)使用

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

这将为您工作。