Внедрение зависимостей: два служебных подкласса, но как определить, какой из них создавать - PullRequest
0 голосов
/ 04 октября 2019

Я использую ядро ​​.net для внедрения зависимостей для создания экземпляра класса.

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

StartUp.cs:

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

Controller.cs:

public ConstructorA (InterfaceA service) { }

Как сказать, что он использует classA или classB в ConstructorA?

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Не думаю, что ваш код будет работать. Но вы можете попробовать, как показано ниже.

В StartUp:

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();  
            }  
        });

В методе Caller:

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();  
    }  
} 
0 голосов
/ 04 октября 2019

Почему вы создаете класс, у которого есть classA и classB для DI? Я думаю, что вы можете создать конкретную модель для ClassA и ClassB. Чем вы можете внедрить эту сложную модель с InterfaceA?

...