使用Json配置配置DI

时间:2016-02-25 15:29:29

标签: asp.net-core asp.net-core-mvc

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

即。我有两个实现相同接口的类,我可以使用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。

2 个答案:

答案 0 :(得分:0)

尚未开箱即用。

您可以在appSettings.json中添加部分时使用反射来自行完成这项工作。但请注意,您的代码可能无法在.NET Native下编译。

你当时可能会问自己的另一个问题是......你什么时候交换实现?您是否正在同时重新部署整个应用程序?如果是,为什么不在代码中使用它并获得静态类型的好处?

此时,这是一个建筑考虑因素,必须加权正面和负面。

答案 1 :(得分:0)

虽然服务中心容器不支持JSON / XML配置。 ASP.net核心允许您使用您选择的IOC容器替换默认容器:其中一些容器支持JSON和XML配置,例如Autofac。

您可以在此处阅读有关Autofac的JSON和XML配置的更多信息:http://docs.autofac.org/en/latest/configuration/xml.html#configuring-with-microsoft-configuration

如何在Asp.net Core中配置Autofac:https://docs.asp.net/en/latest/fundamentals/dependency-injection.html?highlight=addtransient#replacing-the-default-services-container