У меня есть собственный маленький сервисный автобус. Я посылаю команду, получаю ее и вызываю обработчик. Обработчик Я использую небольшую абстракцию для любого контейнера DI -
public interface IDependencyContainer
{
object GetService(Type serviceType);
}
Мне нужно использовать SimpleInjector в качестве контейнера.
public class DependencyContainer : IDependencyContainer
{
private readonly Container _container;
public DependencyContainer(Container container)
{
_container = container;
}
public object GetService(Type serviceType)
{
return _container.GetInstance(serviceType);
}
}
Обработчики зарегистрированы как AsyncScopedLifestyle
, поэтому, когда я получаю сообщение и пытаюсь получить службу типа myDiImplementation.GetService(MyHandlerType)
, я получил ошибку
MyHandler зарегистрирован как стиль жизни «Async Scoped», но экземпляр запрашивается вне контекста активной области действия (Async Scoped)
Документы приведите следующий пример
using (AsyncScopedLifestyle.BeginScope(container)) {
var uow1 = container.GetInstance<IUnitOfWork>();
await SomeAsyncOperation();
var uow2 = container.GetInstance<IUnitOfWork>();
await SomeOtherAsyncOperation();
Assert.AreSame(uow1, uow2);
}
Итак, чтобы иметь возможность вызывать метод-обработчик, мне нужно сделать это внутри области (в качестве примера в DependencyContainer). Я не знаю, как это сделать без каких-либо обратных вызовов
в DependencyContainer
. Есть идеи?