我们正在开发一个运行 .net core 2.x 的 Windows 服务。在 Steve Gordon 的这篇博客文章之后,将 .netcore 通用主机应用程序作为服务运行,事情似乎运行良好……只要我们使用IServiceCollection
. 我更喜欢 SimpleInjector,但我不确定如何像在 asp.net 核心中那样使用它。我有一种方法可以替换内置 DI,如此处所述默认服务容器替换,我知道 SI 团队不推荐ASP.NET Core MVC 集成指南的方法,所以在这个用例中有更好的方法吗?
这是我到目前为止所拥有的,但它不舒服
--主程序
internal class Program
{
private static async Task Main(string[] args)
{
var isService = !(Debugger.IsAttached || args.Contains("--console"));
var builder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Runner>();
//configure SimpleInjector here???
});
if (isService)
{
await builder.RunAsServiceAsync();
}
else
{
await builder.RunConsoleAsync();
}
}
}
在此处配置容器或多或少可以工作,但由主机创建的第一个类(即Runner
在这种情况下)由主机创建并通过 IServicesCollection 注入任何依赖项。所以我的问题是如何让它从我的 SI 容器中注入?