0

我正在尝试在此处遵循此示例

唯一的事情是我需要注入多个托管服务而不是像这样

services.AddSimpleInjector(container, options =>
{
    // Registers the hosted service as singleton in Simple Injector
    // and hooks it onto the .NET Core Generic Host pipeline.
    options.AddHostedService<TimedHostedService<IProcessor>>();
    options.AddHostedService<MyHostedService<IProcessor>>();
});

AddHostedService 的实现将一个实例注册为 IHostedService 接口的单例我尝试使用 services.TryAddEnumerable 注册多个 IHostedService 实现但没有成功有什么建议吗?谢谢

4

1 回答 1

0

我无法重现您的问题。我在 Visual Studio 2022 ASP.NET Core MVC 6 项目中使用了以下代码:

using System.Diagnostics;
using SimpleInjector;

var container = new Container();

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
var services = builder.Services;

services.AddControllersWithViews();

services.AddSimpleInjector(container, options =>
{
    options.AddHostedService<MyHostedService1>();
    options.AddHostedService<MyHostedService2>();
});

WebApplication app = builder.Build();

app.Services.UseSimpleInjector(container);

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

MyHostedService1MyHostedService2定义如下:

class MyHostedService1 : IHostedService
{
    public Task StartAsync(CancellationToken cancellationToken)
    {
        Console.WriteLine($"Starting {this.GetType().Name}");
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}

class MyHostedService2 : IHostedService
{
    public Task StartAsync(CancellationToken cancellationToken)
    {
        Console.WriteLine($"Starting {this.GetType().Name}");
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}

Web 应用程序的控制台输出如下:

Starting MyHostedService1
Starting MyHostedService2
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5071
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: f:\VS2022\HodgePodge\AspNetCore6MVC\

由此我得出结论,两个托管服务都已启动,这意味着您遇到的问题无法通过您发布的代码重现。

于 2022-03-05T09:29:26.477 回答