Разрешение новых экземпляров с помощью DryIoc при использовании Reuse.InWebRequest/Reuse.InThread

Я использую DryIoc в проекте WebApi. По умолчанию для повторного использования задано значение Reuse.InWebRequest. В некоторых случаях мне нужно разрешить новые экземпляры во время запроса. При использовании Reuse.InCurrentScope я могу разрешать новые экземпляры следующим образом:

public class Foo : IFoo
{
    public Foo(IMyDependency dep, IContainer container){
        using (var scope = container.OpenScope()) {
            var newInstance = scope.Resolve<IMyDependency>();
            Assert.IsFalse(ReferenceEquals(dep, newInstance));
        }
    }
}

Но при использовании Request.InWebRequest или Request.InThread (которые в основном совпадают с документацией) новые экземпляры не создаются, но уже разрешенные экземпляры используются повторно. Я также пытался использовать IContainer.CreateFacade() но результат тот же.

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

Обновление для уточнения

Я не могу использовать Reuse.Transient, потому что мне нужен один и тот же экземпляр во время запроса в 99% случаев. Мне нужен новый экземпляр только при злоупотреблении контейнером в качестве локатора службы.

2 ответа

Решение

Вы можете зарегистрировать сервис дважды, один с временной областью, а другой с временным повторным использованием. Для переходного процесса укажите serviceKey при регистрации и использовать его в сервисном локаторе для идентификации временного сервиса.

Из документации, Reuse.Transient должен достичь того, что вы ищете.

container.Register<IFoo, Foo>(Reuse.Transient);
Другие вопросы по тегам