获取依赖于Startup类中DI的类的实例

问题描述 投票:0回答:2

我正在运行.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。

c# .net-core dependency-injection asp.net-core-2.2
2个回答
0
投票

首先通过RunAfterStartup方法将ConfigureServices添加到您的服务:

services.AddSingleton<RunAfterStartup>();

现在您可以将此类插入Configure方法:

public void Configure(IApplicationBuilder app, RunAfterStartup runAfterStartup)
{
    app.UseMvc();

    runAfterStartup.Foo();
}

0
投票

您可以从传递的参数访问依赖项注入容器:

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.