2016-02-25 2 views
0

Возможно ли настроить настраиваемый DI с помощью новой конфигурации JSON?Конфигурирование DI с использованием конфигурации Json

I.e. У меня есть два класса, которые реализуют один и тот же интерфейс, могу ли я использовать конфигурацию JSON для указания того, какой класс следует вводить.

Например: Учитывая два класса

public class RealService: IService {...} 
public class FakeService: IService {...} 

и appsettings.json:

"ServiceImplementation": "FakeService" 

и в Startup.cs

void ConfigureServices(IServiceCollection services){ 
    var serviceNameToInject = Configuration["ServiceImplementation"]; 
    IService serviceToInject = Type.GetType(serviceNameToInject) 
    service.AddTransient<IService, serviceToInject > 
    .... 

Я полагаю, что-то, как это будет работать, но это не делает чувствую себя правильно, так есть лучший способ t o добиться конфигурирования DI с помощью новой структуры ASP.NET Core MVC?

Заранее благодарен, Michael McD.

+1

Да и нет. Вы можете добавить конфигурацию в json, но вы должны обработать их самостоятельно в коде. Нет вне коробки – Tseng

ответ

0

В то время как из контейнера Service не поддерживает конфигурации JSON/XML. Ядро ASP.net позволяет заменить контейнер по умолчанию контейнером IOC по вашему выбору: некоторые из них поддерживают конфигурацию JSON и XML, такую ​​как Autofac.

Вы можете прочитать больше о JSON и XML конфиг Autofac здесь: http://docs.autofac.org/en/latest/configuration/xml.html#configuring-with-microsoft-configuration

И как настроить Autofac в ASP.Net Ядра За здесь: https://docs.asp.net/en/latest/fundamentals/dependency-injection.html?highlight=addtransient#replacing-the-default-services-container

+0

Привет, Мартин - Я думаю, что это подход, который мы предпримем, если нам понадобится более одной настраиваемой зависимости. На данный момент мы «закатили свое» решение в соответствии с предложением @Tseng. О, спасибо за ссылки. –

0

Нет поддержки из коробки.

Вы можете использовать отражение, чтобы сделать это самостоятельно, добавляя разделы в свой appSettings.json. Однако имейте в виду, что ваш код не может быть скомпилирован под .NET Native.

Другой вопрос, который вы можете задать себе в этот момент, - это ... когда вы меняете реализации. Вы делаете повторное развертывание всего своего приложения одновременно? Если да, почему бы не использовать его в коде и получить преимущества статического ввода?

В тот момент, это архитектурное рассмотрение и положительные и отрицательные, должны быть взвешены.

+0

Hi Maxime - забавно, что это наш собственный архитектор, который предлагает нам настроить DI. Но да, мы используем статическую типизацию и новый MVC 6 DI, по большей части, которым мы действительно довольны. –

Смежные вопросы