如何注入需要订阅事件的类

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

我具有以下类定义

public EventBusHandler(IEventBus eventBus, IService service)
{    
    eventBus.Subscribe<Event>(EventHandler);
}

我需要在每个请求上启动Service类,因为它维护范围,所以我也需要将处理程序类设为单例,因为它不依赖于请求,并且应该可以随时用于处理事件,所以我在我的启动类中包含以下内容

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IEventBus>(EventBus.GetEventBus());
    services.AddSingleton<EventBusHandler>();

    services.AddScoped<IService, Service>();
}

public override void Configure(IApplicationBuilder app, IHostEnvironment env)
{
    app.ApplicationServices.GetRequiredService<EventBusHandler>();
}

但是这会引发错误,因为单例无法引用作用域实例。我的问题是如何构建此结构,因此我可以订阅事件,同时仍然能够引用作用域实例。可能吗?

asp.net-core
1个回答
0
投票

找到了解决方案。我将构造函数更改为

public EventBusHandler(IEventBus eventBus, IServiceProvider serviceProvider)

然后用于获取IService

var service = serviceProvider.CreateScope().ServiceProvider.GetRequiredService<IService>();
© www.soinside.com 2019 - 2024. All rights reserved.