【发布时间】:2017-09-24 19:17:12
【问题描述】:
我正在尝试为IWebHostBuilder 实现一个新的扩展方法,该方法执行一些代码,比如在某处注册。
重要的是,当应用程序关闭时它也会取消注册。
我添加了一些代码来显示我想要做什么。这里的问题是,IApplicationLifetime 的实例尚不可用。这种新的扩展方法是最后在构建 WebHost 的管道中添加的。
public static IWebHostBuilder UseHttpGatewayappRegistration(this IWebHostBuilder webHostBuilder)
{
webHostBuilder.ConfigureServices(services =>
{
var sp = services.BuildServiceProvider();
// This instance is not available
IApplicationLifetime applicationLifetime = sp.GetService<IApplicationLifetime>();
// These instances are ok
AppSettings appSettings = sp.GetService<AppSettings>();
ILoggerFactory loggerFactory = sp.GetService<ILoggerFactory>();
var registration = new Registration(loggerFactory.CreateLogger<Registration>());
applicationLifetime.ApplicationStopping.Register(() =>
{
registration.Unregister();
});
});
return webHostBuilder;
}
为什么IApplicationLifetime 实例为空,即使我在构建 WebHost 管道的管道中最后添加了此扩展方法?如果有人能向我提供一些关于所有“ConfigureServices”方法的执行顺序以及如何或是否可以在ConfigureServices 方法中使用IApplicationLifetime 的信息,那就太好了。
我知道我可以在没有WebHostBuilder 的情况下完成这一切,但对我来说在那里这样做似乎是合乎逻辑的,我也认为必须有一种方法。
很遗憾,我在网上找不到太多信息...
谢谢。
编辑:我找到了一种在ConfigureServices 方法中使用DI 的方法。我相应地编辑了问题。这对我有帮助:How to Resolve Instance Inside ConfigureServices in ASP.NET Core
【问题讨论】:
标签: c# asp.net-core .net-core