异步队列轮询和依赖注入

时间:2018-09-06 20:01:27

标签: asp.net-core asp.net-core-2.1

我们正在构建一个微服务平台,该平台将接受REST API流量并处理来自内部异步队列的消息,以进行容器间通信。

我们将内置的依赖注入用于控制器,并且效果很好,但是我想知道如何管理异步队列的依赖注入。

这是我现在拥有的:

启动时

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    new QueueSubscriber().SubScribe<MessageHandler>();
}

订户

public void Subscribe<T>()
{
    Task.Run(() => Poll<T>());
}

private async Task Poll<T>()
{
    // Polling logic here

    // Found message
    Task.Run(() => CallHandler<T>()
}

public async Task CallHandler<T>()
{
    // I want to inject dependencies here
    var handler = Activator.CreateInstance(typeof(T)) as IMessageHandler<T>;
    await handler.HandleMessage();
}

在使用services.AddSingleton<IDependency, Dependency>();所提供的可用依赖项注入方面,我找不到任何东西

我看到了实现IHostedServices模式的方法,但这不允许我将依赖项注入到消息处理程序的新实例中

编辑:这是我现在拥有的,创建消息处理程序的实例并将其传递通过,但不确定这是否是最佳方法。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IDependency dependency)
{
    new QueueSubscriber().SubScribe(new MessageHandler(dependency);
}

订户

public void Subscribe<T>(IMessageHandler<T> handler)
{
    Task.Run(() => Poll(handler));
}

private async Task Poll<T>(IMessageHandler<T> handler)
{
    // Polling logic here in while loop

    // Found message
    Task.Run(() => CallHandler(handler)
}

public async Task CallHandler<T>(IMessageHandler<T> handler)
{
    await handler.HandleMessage();
}

0 个答案:

没有答案