当托管服务还实现其他接口时如何注入托管服务

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

我的 .NET Core Web 应用程序中有以下界面:

public interface IIntegrationManagerService : IHostedService
{
    Task<List<IFunciones>> GetFunctionList();
}

实现如下:

public class IntegrationManagerService : IIntegrationManagerService, IDisposable

我以这种方式添加到 Program.cs 中:

services.AddHostedService<IIntegrationManagerService>();

这样做时,构建服务时会抛出异常。

如果我用这个更改上面的行:

services.AddHostedService<IntegrationManagerService>();

服务构建完成,但是实例化要注入对象的类时抛出异常。

enter image description here

如果我注入

IHostedService
不会引发异常,但我无法使用
IIntegrationManagerService
方法。

我该怎么做?

我尝试添加单例,但是

Start
服务的方法显然没有被调用。

c# .net-core asp.net-core-hosted-services
1个回答
0
投票

您是否尝试从控制器引用您的托管服务?如果我记得的话,托管服务会添加到具有范围生命周期的 DI 容器中。如果将 IServiceProvider 注入到控制器中,则可以从 IServiceProvider 中提取它们:

    var scope = serviceProvider.CreateScope();
    var service = scope.ServiceProvider.GetRequiredService<IIntegrationManagerService>();

如果这不起作用,您可以将托管服务配置为响应控制器内引发的事件。这可能被认为是一种反模式,但会提供一个可行的、可重用的解决方案。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.