如何为两个几乎相同的应用程序删除 IoC 容器中的重复项?

红咖喱

我有两个应用程序(在同一个解决方案中)依赖于同一个共享库(单独的项目)。这个共享库完成了大部分工作,并将一些服务作为接口依赖项。

我的每个应用程序的 IoC 容器看起来都相同,除了两个应用程序之间需要不同的一项服务。我怎样才能最大限度地减少 IoC 容器中的这种重复?

古鲁·斯特朗

如果我正确理解了问题(并考虑到在没有看到实际代码的情况下很难争论正确的解决方案),方法将是这样的。

假设您有下一个解决方案结构:

SharedLib(can be just dll/nuget)
   ...
AppOne(refs and DI's shared)
   ...
AppTwo(refs and DI's shared)
   ...

那么你需要做的是:

SharedLib
   ...
Shared.DI (refs SharedLib and package with your IoC container, and other stuff if needed)
   ...
AppOne (refs Shared.DI)
   ...
AppTwo (refs Shared.DI)
   ...

Shared.DI您创建一个名为 like 的方法中RegisterShared,它将处理所有注册并将从AppOne调用AppTwo我会建议这样的东西:

public static RegistrationExtensions
{
    public static void RegisterShared(this YourIoCBuilder builder,
       Action<YourIoCBuilder> registerUniqueServiceAction)
    {
         // do the common stuff 
         registerUniqueServiceAction(builder);             
    }
}

您可以在registerUniqueServiceAction之前或之后省略并注册所需的服务,但我个人更喜欢更明确的 API,因此很明显,此方法不会注册SharedLib工作所需的所有内容还取决于您使用的 IoC 究竟是什么,您可以为其提供更明显的签名,registerUniqueServiceAction以便清楚实际需要什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据需要的类注册依赖项(使用 ASP CORE 中的内置 IOC 容器)

如何为SSIS中的每个循环容器上传几乎相同名称的两个文件?

如何从.net核心IoC容器中删除默认服务?

在C#中创建一个小的IoC容器

如何在Laravel(IoC容器)中解析BadMethodCallExeption

从多个程序集中注册IoC容器

如何使用Zenject的IOC容器注册GameObject

IoC和DI在Web应用程序中的优势

如何选择使用哪个 IoC 容器 WPF Prism 应用程序?

如何在SignalI集线器的Unity IoC容器中注入依赖项?

在Hack中编写IoC容器

IoC容器。注入容器

如何为 django 中具有索引功能的两个应用程序创建一个 url?

轻巧的Java ioc容器?

IoC避免注入容器

VBA的IoC容器

跨平台(Xamarin)应用中使用哪个IoC容器?

如何为每种口味的Gradle中的不同资产文件夹创建两个应用程序?

C#和IoC传递依赖项已删除

如何对使用IoC容器类的类进行单元测试

如何在IoC容器之外执行简单的Spring JDBC事务?

如何使 Spring IoC 容器在整个项目中可用

如何使用Dagger 2等IOC容器注入抽象

如何从视图模型访问 Prism.ioc 容器?

Ioc / DI-如何使用已注册的依赖项?

使用ServiceStack Funq IoC:如何注入依赖项?

如何远程调试在同一容器中运行的具有相同代码库但配置文件不同的两个spring boot应用程序?

替换MvvmCross中的默认IoC容器

合并两个列表并删除重复项,而不删除原始列表中的重复项