我有两个应用程序(在同一个解决方案中),它们依赖于同一个共享库(单独的项目)。这个共享库完成了大部分的工作,并将一些服务作为接口依赖。
我为每个应用程序设计的 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)
...
{fnTahomafs10bord0shad01cH00FFFF}In... Shared.DI
你创建了一个叫做 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
这样就会清楚实际需要的是什么。