是否可以使用新的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。
答案 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