Асинхронный опрос очереди и внедрение зависимостей - PullRequest
0 голосов
/ 06 сентября 2018

Мы создаем платформу микросервисов, которая будет принимать трафик API REST и обрабатывать сообщения из внутренней асинхронной очереди для межконтейнерной связи.

Мы используем встроенное внедрение зависимостей для контроллеров, и это хорошо работает, но мне интересно, как управлять внедрением зависимостей для асинхронных очередей.

Вот что у меня сейчас есть:

При запуске

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...