首页 > 解决方案 > .NET Core - 注册服务,如何注册服务的单独版本

问题描述

我有一个接口IService和两个实现ServiceA,并且ServiceB.

大多数时候我想使用实现A,但我也有另一个需要实现的服务B。有没有办法做到这一点?它应该看起来像这样:

services.AddScoped<IService, ServiceA>();

services.AddScoped<ISomethingElse, SomethingElse>();
services.WhenResolving<ISomethingElse>.AddScoped<IService, ServiceB>();

标签: dependency-injection.net-core

解决方案


我将提到这样做的两个版本。

首先,假设您有配置参数,并根据您的配置参数决定您的接口将解析哪个服务

然后

services.AddScoped<ISomethingElseService, SomethingService>();

if (Configuration["MyServiceParam"] == "X")
    services.AddScoped<ISomethingService, SomethingElseService>();

另一种选择是

services.AddScoped<ISomethingService>(s => {
   var MyServiceA = s.GetService<MyServiceA>();
   if (MyServiceA is null)
      return new SomethingElseService();
   else
      return new SomethingService(MyServiceA);
});

推荐阅读