gpt4 book ai didi

c# - Asp.net Core MVC - 在应用程序关闭期间获取依赖项

转载 作者:行者123 更新时间:2023-11-30 21:27:20 28 4
gpt4 key购买 nike

我正在使用 ASP.net Core MVC 2.2 开发一个网络应用程序,在我的 Startup 类中,我正在注册一个 MyService 类型的依赖注入(inject),就像这样:

public void ConfigureServices(IServiceCollection services)
{
//Inject dependency
services.AddSingleton<MyService>();

//...other stuff...
}

这工作正常。但是,我需要在应用程序关闭期间检索 MyService 的实例,以便在应用程序终止之前执行一些清理操作。

所以我尝试这样做 - 首先我在我的启动类中注入(inject)了 IServiceProvider,所以它可用:

public Startup(IConfiguration configuration, IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
Configuration = configuration;
}

然后,在 Configure 方法中,我为 ApplicationStopping 事件配置了一个 Hook ,以拦截关机并调用 OnShutdown 方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
//Register app termination event hook
applicationLifetime.ApplicationStopping.Register(OnShutdown);

//...do stuff...
}

最后,在我的 OnShutdown 方法中,我尝试获取我的依赖项并使用它:

private void OnShutdown()
{
var myService = ServiceProvider.GetService<MyService>();
myService.DoSomething(); //NullReference exception, myService is null!
}

但是,从代码中的注释可以看出,这是行不通的:返回的依赖项始终为 null。我在这里做错了什么?

最佳答案

我能够通过像这样将您的应用程序服务显式传递给您的关闭方法来使其工作。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
//Register app termination event hook
applicationLifetime.ApplicationStopping.Register(() => OnShutdown(app.ApplicationServices));

//...do stuff...
}


private void OnShutdown(IServiceProvider serviceProvider)
{
var myService = serviceProvider.GetService<MyService>();
myService.DoSomething();
}

请记住,这将适用于单例服务 - 如果您想解析作用域服务,您可能必须 CreateScope()

关于c# - Asp.net Core MVC - 在应用程序关闭期间获取依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com