我正在运行.NET Core 2.2应用程序,并且我想在Startup.cs中进行初始设置后立即运行一些代码。该类依赖于已注册的类型,我不太了解如何使用已注入的依赖项创建实例。假设我有以下要在设置完成后立即运行的类。
public class RunAfterStartup
{
private readonly IInjectedService _injectedService;
public RunAfterStartup(IInjectedService injectedService)
{
_injectedService = injectedService;
}
public void Foo()
{
_injectedService.Bar();
}
}
有没有一种方法可以在启动中运行RunAfterStartup().Foo()
?
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(typeof(IInjectedService), typeof(InjectedService));
...
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
// I assume this has to go here, but could be anywhere
var runAfterStartup = MagicallyGetInstance();
runAfterStartup.Foo();
}
[我知道在.NET Framework(不确定Core)中,您可以通过执行container.GetInstance<RunAfterStartup>().Foo()
之类的操作来使用SimpleInjector进行此操作,但是我不确定在.NET Core中该方法如何工作,我只想使用内置DI。
首先通过RunAfterStartup
方法将ConfigureServices
添加到您的服务:
services.AddSingleton<RunAfterStartup>();
现在您可以将此类插入Configure
方法:
public void Configure(IApplicationBuilder app, RunAfterStartup runAfterStartup)
{
app.UseMvc();
runAfterStartup.Foo();
}
您可以从传递的参数访问依赖项注入容器:
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
// I assume this has to go here, but could be anywhere
var runAfterStartup = app.ApplicationServices.GetService<IInjectedService>();
runAfterStartup.Foo();
}