Разрешение новых экземпляров с помощью 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);