Разрешить сферу регистрации - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть собственный маленький сервисный автобус. Я посылаю команду, получаю ее и вызываю обработчик. Обработчик Я использую небольшую абстракцию для любого контейнера 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. Есть идеи?

...