我正在运行.NET Core 2.2应用程序,并且我想在Startup.cs中进行初始设置后立即运行一些代码。该类依赖于注册的类型,我不太了解如何使用已注入(inject)的依赖项创建一个istance。假设我有以下要在安装完成后立即运行的类。

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>();

现在,您可以将此类注入(inject)Configure方法:
public void Configure(IApplicationBuilder app, RunAfterStartup runAfterStartup)
{
    app.UseMvc();

    runAfterStartup.Foo();
}

10-07 19:30