Dependency injection .NET核心-注册服务,如何注册服务的单独版本

Dependency injection .NET核心-注册服务,如何注册服务的单独版本,dependency-injection,.net-core,Dependency Injection,.net Core,我有一个接口IService和两个实现ServiceA和ServiceB 在大多数情况下,我希望使用实现A,但我还有另一个需要实现B的服务。有没有办法做到这一点?它应该是这样的: services.AddScoped<IService, ServiceA>(); services.AddScoped<ISomethingElse, SomethingElse>(); services.WhenResolving<ISomethingElse>.AddScop

我有一个接口
IService
和两个实现
ServiceA
ServiceB

在大多数情况下,我希望使用实现
A
,但我还有另一个需要实现
B
的服务。有没有办法做到这一点?它应该是这样的:

services.AddScoped<IService, ServiceA>();

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

我将提到两种版本的方法

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

然后

services.addScope();
如果(配置[“MyServiceParam”]=“X”)
services.addScope();
另一个选择是

services.AddScoped<ISomethingService>(s => {
   var MyServiceA = s.GetService<MyServiceA>();
   if (MyServiceA is null)
      return new SomethingElseService();
   else
      return new SomethingService(MyServiceA);
});
services.AddScoped(s=>{
var myserviceca=s.GetService();
if(MyServiceA为空)
返回新的somethingelservice();
其他的
返回新的SomethingService(myserviceca);
});

另一种情况是什么?是的,这是很有可能的。看看这个,让我知道这是否有帮助?@Morema有趣的阅读,但实际上没有帮助:)我想要一个特定的例子,一个在一个案例中,另一个在另一个案例中。不理想,但我设法根据我们的需要调整了你的第二个例子
services.AddScoped<ISomethingService>(s => {
   var MyServiceA = s.GetService<MyServiceA>();
   if (MyServiceA is null)
      return new SomethingElseService();
   else
      return new SomethingService(MyServiceA);
});