我们正在构建一个微服务平台,该平台将接受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();
}