C#依赖注入运行时(动态)注册

xgp

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章