我正在使用VS 2017和.NET Core。使用依赖注入,我想在运行时动态注册我的服务。我的目标是编写服务实例,以在单独的程序集中实现服务接口。然后,服务名称/程序集名称将被添加到某种配置文件(或db表)中。
我的注册代码将执行以下操作:
var ServiceTypeName = LoadServiceAssembly(AssemblyName);
var serviceProvider = new ServiceCollection()
.AddTransient<IDILogger, "ConsoleDILogger">() // <--- Goal
.BuildServiceProvider();
var logger = serviceProvider.GetService(IDILogger);
显然,AddTransient行将不起作用,因为这种方法不存在。但是,它确实描述了这个想法。我想通过字符串名称注册该类型,以便每次添加新服务类型时都不需要重新编译加载器应用程序。
我似乎找不到如何执行此操作。欢迎大家提出意见。
TIA
您可以从设置中读取配置的类型,通过反射加载所需的类型并将其注册到服务集合中:
// Read from config
var assemblyPath = "...";
var typeName = "...";
var assembly = Assembly.LoadFrom(assemblyPath);
var loggerType = assembly.GetType(typeName);
var serviceProvider = new ServiceCollection()
.AddTransient(typeof(IDILogger), loggerType)
.BuildServiceProvider();
var logger = serviceProvider.GetService<IDILogger>();
如果添加或重新配置新的记录器,则这种动态方法将不需要重新编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句