.Net 6 中的 IServiceProvider 实例

发布于 2025-01-14 00:24:58 字数 1159 浏览 0 评论 0原文

在 Startup.cs 的 .Net 5 ASP.NET 应用程序上,我有以下内容(对于 Hangfire):

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
...
GlobalConfiguration.Configuration.UseActivator(new ServiceProviderJobActivator(serviceProvider));
...
}

我想转移到 .Net 6 配置方式(在 Program.cs 中),但我不知道如何获取提供给 ServiceProviderJobActivator 方法的 IServiceProvider 实例。

方法是:

internal class ServiceProviderJobActivator : Hangfire.JobActivator
{
    private readonly IServiceProvider _serviceProvider;

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

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

我已经尝试过:

GlobalConfiguration.Configuration.UseActivator(new ServiceProviderJobActivator(app.Services));

我也尝试过:

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

但 ActivateJob 在这两种情况下都返回 null

谢谢

On my .Net 5 ASP.NET application at Startup.cs I have the follwing (for Hangfire):

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
...
GlobalConfiguration.Configuration.UseActivator(new ServiceProviderJobActivator(serviceProvider));
...
}

I want to move to the .Net 6 way of configuration (in Program.cs), but I don't know how to get an instance of IServiceProvider to provide to the ServiceProviderJobActivator method.

The method is:

internal class ServiceProviderJobActivator : Hangfire.JobActivator
{
    private readonly IServiceProvider _serviceProvider;

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

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

I have tried:

GlobalConfiguration.Configuration.UseActivator(new ServiceProviderJobActivator(app.Services));

I also tried:

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

but the ActivateJob returns null in both cases

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

几味少女 2025-01-21 00:24:58

对于任何想了解如何获取 IServiceProvider 实例的人,在调用 builder.Build() 后,app.Services 属性将解析为 IServiceProvider 实例。

For anyone looking how to get a IServiceProvider instance, after you call builder.Build() the app.Services property will resolve as an IServiceProvider instance.

初心 2025-01-21 00:24:58

您是否尝试过类似 将 .NET 5“基于启动”的应用升级到 .NET 6 ?

它应该导致类似的结果:

var app = builder.Build();
GlobalConfiguration.Configuration.UseActivator(new ServiceProviderJobActivator(app.Services));

Have you tried something like option 3 from Upgrading a .NET 5 "Startup-based" app to .NET 6 ?

It should lead to something like :

var app = builder.Build();
GlobalConfiguration.Configuration.UseActivator(new ServiceProviderJobActivator(app.Services));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文