ASP.. NET core在应用启动时启动依赖注入



我将我的一个服务作为ConfigureServices方法的最后一项注入:

services.AddSingleton<IBot>(_ => new De.Impl.Bot(Configuration));

我在docker容器中运行应用程序,所以每当容器重新启动时,我需要调用我的控制器,这样我就可以让我的服务运行。如何在配置部分开始时使其运行?

对于。net Core 3.1和。net 5.0

首先,您可以将业务代码编写为扩展:

using Microsoft.Extensions.Hosting;
public static IHost DoSomething(this IHost host)
{
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var yourService = services.GetService<YourService>();
yourService.DoSomething();
}
return host;
}

所以如果你想在每次应用程序启动时调用该方法,只需调用:

// .NET 5.0 Style
public static void Main(string[] args)
{
CreateHostBuilder(args)
.Build()
.DoSomething()
.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
}

对于。net 6.0

这样会更容易。在Program.cs中直接访问var yourService = app.Services.GetRequiredService<YourService>

// .NET 6.0 style, in Program.cs, before app.Run();
var yourService = app.Services.GetRequiredService<YourService>();
yourService.DoSomething();
app.Run();

最新更新