2016-02-25 77 views
0

是否可以使用新的JSON配置設置可配置DI?使用Json配置DI配置

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 > 
    .... 

我認爲像這樣的工作,但它不感覺不錯,所以有更好的方法使用新的ASP.NET Core MVC框架實現Json可配置DI?

在此先感謝, Michael McD。

+1

是,也不是。你可以將配置添加到json中,但是你必須在代碼中自己處理它們。沒有開箱的方式 – Tseng

回答

0

雖然停止服務容器不支持JSON/XML配置。 ASP.net核心允許你用你選擇的IOC容器替換默認的容器:其中一些支持JSON和XML配置,比如Autofac。

你可以閱讀更多有關JSON和這裏Autofac的XML配置:http://docs.autofac.org/en/latest/configuration/xml.html#configuring-with-microsoft-configuration

而如何在Asp.net核心配置Autofac在這裏: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

嗨馬克西姆 - 有趣的是,這是我們的內部建築師,這表明我們有可配置的DI。但是,我們正在使用靜態類型和新的MVC 6 DI,我們非常滿意。 –