首页 > 解决方案 > 依赖注入:两个服务子类,但如何判断要实例化哪一个

问题描述

我正在使用 .net core 进行依赖注入来实例化类。

class A : InterfaceA { } and class B : InterfaceA { }

启动.cs:

_service.AddTransient(InterfaceA, classA)
_service.AddTransient(InterfaceA, classB)

控制器.cs:

public ConstructorA (InterfaceA service) { }

如何判断它在 ConstructorA 中使用了 classA 还是 classB?

标签: c#dependency-injection.net-corescoping

解决方案


我不认为你的代码会起作用。但是你可以像下面这样尝试。

在启动中:

services.AddSingleton<classA>();  
services.AddSingleton<classB>();  


services.AddTransient<Func<string, InterfaceA>>(serviceProvider => key =>  
{  
   switch (key)  
     {  
       case "A":  
           return serviceProvider.GetService<classA>();  
       case "B":  
           return serviceProvider.GetService<classB>();  
       default:  
           throw new KeyNotFoundException();  
            }  
        });

在调用者方法中:

public class Caller: ICaller  
{  
    private readonly Func<string, InterfaceA> _injector;  
    public Caller(Func<string, InterfaceA> injector)  
    {  
        this._injector = injector;  
    }  

    public object Get()  
    {  
        return _injector("A").GetData();  
    }  
} 

推荐阅读