AddHostedService 用于从动态加载的程序集中加载的类型
AddHostedService for Types that are loaded from dynamically loaded assemblies
我有一个带有单一后台服务 (MyInternalBackgroundService) 的 .NET 5 后台工作者应用程序。
现在我正在开发模块化插件体系结构,其中将插件放在插件目录中,从那里加载程序集。每个程序集可以包含多个 class 继承自 BackgroundService 的定义。我加载了从 BackgroundService 继承的类型列表。
我只是不知道如何为加载的类型调用 AddHostedService 方法。每种方法似乎都会导致不同的编译器错误。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyInternalBackgroundServiceImplementation>();
TypeInfo[] moduleTypes = // class scanning directories for dlls, load the assemblies and find the desired types
foreach(var moduleType in moduleTypes)
{
// can't find the correct way
// services.AddHostedService<moduleType>();
//services.AddHostedService<moduleType.GetType()>();
}
});
内部 AddHostedService
看起来像这样
进一步AddTransient
看起来像这样
所以可以试试下面的方法(当然只要TypeInfoObjectHere
实现了IHostedService
)services.AddTransient(typeof(IHostedService), TypeInfoObjectHere);
我有一个带有单一后台服务 (MyInternalBackgroundService) 的 .NET 5 后台工作者应用程序。
现在我正在开发模块化插件体系结构,其中将插件放在插件目录中,从那里加载程序集。每个程序集可以包含多个 class 继承自 BackgroundService 的定义。我加载了从 BackgroundService 继承的类型列表。
我只是不知道如何为加载的类型调用 AddHostedService 方法。每种方法似乎都会导致不同的编译器错误。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyInternalBackgroundServiceImplementation>();
TypeInfo[] moduleTypes = // class scanning directories for dlls, load the assemblies and find the desired types
foreach(var moduleType in moduleTypes)
{
// can't find the correct way
// services.AddHostedService<moduleType>();
//services.AddHostedService<moduleType.GetType()>();
}
});
内部 AddHostedService
看起来像这样
进一步AddTransient
看起来像这样
所以可以试试下面的方法(当然只要TypeInfoObjectHere
实现了IHostedService
)services.AddTransient(typeof(IHostedService), TypeInfoObjectHere);