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

问题描述 投票:0回答:1

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

我为每个应用程序设计的 IoC 容器看起来都是一样的,只有一个服务需要在两个应用程序之间有所不同。我怎样才能尽量减少IoC容器中的这种重复?

c# dependency-injection inversion-of-control dryioc
1个回答
1
投票

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

让我们假设你有下一个解决方案的结构。

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)
   ...

{fnTahomafs10bord0shad01cH00FFFF}In... Shared.DI 你创建了一个叫做 RegisterShared 它将处理所有的注册,并将从 AppOneAppTwo. 我建议这样

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

你可以省去 registerUniqueServiceAction 并在之前或之后注册所需的服务,但就我个人而言,我更喜欢更明确的API,所以很明显,这个方法并没有为 SharedLib 来工作。也取决于你使用的IoC到底是什么,你可以提供更明显的签名,用于 registerUniqueServiceAction 这样就会清楚实际需要的是什么。

© www.soinside.com 2019 - 2024. All rights reserved.