gpt4 book ai didi

c# - 访问 .net 核心中的 IServiceProvider/容器

转载 作者:行者123 更新时间:2023-12-04 22:01:57 29 4
gpt4 key购买 nike

我希望能够访问内置的 IoC 容器(IServiceProvider 我相信)。

我知道在代码中访问它通常是不好的做法,我们应该允许框架将所需的任何依赖项注入(inject)到 Controller 之类的东西中。

我对此的特殊应用是我正在使用另一种产品Hangfire .该框架实例化对象本身。为了将依赖项注入(inject)这些对象,您需要覆盖 JobActivator类并在那里引用您自己的容器。

This问题显示了如何为测试目的创建一个新容器,但我想访问我已经设置的容器,而不必复制它。使用 Autofac 之类的 DI 框架,您可以在添加所有服务后构建容器时访问容器。

任何人都可以帮忙吗?

最佳答案

您可以访问 IServiceProvider在配置阶段app.ApplicationServices或使用 HttpContext.RequestServices .定制JobActivator应该看起来像:

public class AspNetCoreJobActivator : JobActivator
{
private IServiceProvider _serviceProvider;

public AspNetCoreJobActivator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}

public AspNetCoreJobActivator(IHttpContextAccessor httpContextAccessor)
{
_serviceProvider = httpContextAccessor.HttpContext.RequestServices;
}

public AspNetCoreJobActivator(HttpContext context)
{
_serviceProvider = context.RequestServices;
}

public override object ActivateJob(Type type)
{
return _serviceProvider.GetService(type);
}
}

Startup.cs文件:
public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
GlobalConfiguration.Configuration.UseActivator(new AspNetCoreJobActivator(serviceProvider)); // or app.ApplicationServices
var server = new Hangfire.BackgroundJobServer();

app.UseMvcWithDefaultRoute();
}

关于c# - 访问 .net 核心中的 IServiceProvider/容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42363313/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com