是否有通过包含 interface - >的JSON文件在.NET Core 2.0中配置依赖项注入的示例类映射? E.g。
var someServiceConfigBuilder = new ConfigurationBuilder();
someServiceConfigBuilder.AddJsonFile("someservice.json");
var someServiceConfig = someServiceConfigBuilder.Build();
var services = new ServiceCollection();
services.AddOptions();
services.Configure<SomeServiceOptions>(someServiceConfig);
services
// TODO this should really come from the JSON config file
.AddTransient<ISomeService, SomeService>();
因此,不是通过调用AddTransient()
对映射进行硬编码,而是将这些信息来自JSON文件会很棒。
支持吗?如果是,那么JSON配置的预期格式是什么?
答案 0 :(得分:3)
替换默认服务容器
内置服务容器旨在满足基本需求 框架和构建在其上的大多数消费者应用程序。然而, 开发人员可以用他们的首选替换内置容器 容器。
ConfigureServices
方法通常返回void,但是如果 它的签名被更改为返回IServiceProvider
,不同 容器可以配置和返回。有很多IOC 可用于.NET的容器。
(强调我的)
参考:Introduction to Dependency Injection in ASP.NET Core
有了这个我会建议检查是否已经有第三方DI框架提供该功能,并且有一个可以与.Net Core集成的扩展。
注意
使用第三方DI容器时,您必须更改
ConfigureServices
,以便它返回IServiceProvider
而不是void
。
答案 1 :(得分:0)
public static void Injection(IServiceCollection services)
{
var jsonServices = JObject.Parse(File.ReadAllText("dependency.json"))["services"];
var requiredServices = JsonConvert.DeserializeObject < List < Service >> (jsonServices.ToString());
foreach(var service in requiredServices)
{
var serviceType = Type.GetType(service.ServiceType.Trim() + ", " + service.Assembly.Trim());
var implementationType = Type.GetType(service.ImplementationType.Trim() + ", " + service.Assembly.Trim());
var serviceLifetime = (ServiceLifetime) Enum.Parse(typeof(ServiceLifetime), service.Lifetime.Trim());
var serviceDescriptor = new ServiceDescriptor(serviceType: serviceType,
implementationType: implementationType,
lifetime: serviceLifetime);
services.Add(serviceDescriptor);
}
有关更多详细信息,请单击here