在 Startup class 中获取依赖 DI 的 class 实例
Get instance of class that relies on DI in Startup class
我正在 运行ning .NET Core 2.2 应用程序,我有一些代码想在 Startup.cs 中的初始设置后立即 运行。 class 依赖于已注册的类型,我真的不明白我应该如何创建一个已经注入依赖项的实例。假设我有以下 class,我想在设置完成后立即 运行。
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)你可以使用 SimpleInjector 通过做类似 container.GetInstance<RunAfterStartup>().Foo()
的事情来做到这一点,但我不确定这在 .NET Core 中是如何工作的,我会喜欢只使用内置 DI。
首先在 ConfigureServices
方法中将 RunAfterStartup
添加到您的服务中:
services.AddSingleton<RunAfterStartup>();
现在您可以将此 class 注入 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();
}
我正在 运行ning .NET Core 2.2 应用程序,我有一些代码想在 Startup.cs 中的初始设置后立即 运行。 class 依赖于已注册的类型,我真的不明白我应该如何创建一个已经注入依赖项的实例。假设我有以下 class,我想在设置完成后立即 运行。
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)你可以使用 SimpleInjector 通过做类似 container.GetInstance<RunAfterStartup>().Foo()
的事情来做到这一点,但我不确定这在 .NET Core 中是如何工作的,我会喜欢只使用内置 DI。
首先在 ConfigureServices
方法中将 RunAfterStartup
添加到您的服务中:
services.AddSingleton<RunAfterStartup>();
现在您可以将此 class 注入 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();
}