Я пользуюсь Autofac и задаюсь вопросом, можно ли обойти исключение DependencyResolutionException, если экземпляр, возвращенный зарегистрированным типом, равен нулю?Рассмотрим следующий пример:
builder.Register( c => c.Resolve<HttpContextBase>().CurrentHandler as ITemplatePage
).InstancePerHttpRequest();
В этом примере будет возвращено значение NULL, если текущий обработчик (например, страница aspx, которую я посещаю) не имеет типа ITemplatePage, и Autofac сгенерирует исключение DependencyResolutionException, даже еслиЯ использую альтернативу ResolveOptional следующим образом:
container.ResolveOptional<ITemplatePage>();
Можно ли как-то обойти это и получить поведение, при котором Autofac возвращает null вместо того, чтобы выдавать исключение?
Я работалвокруг этого, добавив IsNull-proerty к ITemplatePage и всегда создавая его, например:
builder.Register( c =>
c.Resolve<HttpContextBase>().CurrentHandler as ITemplatePage
?? new TemplatePage(true)
).As<ITemplatePage>().InstancePerHttpRequest();
, а затем я могу работать с ним следующим образом:
var templatePage = container.Resolve<ITemplatePage>();
if(!templatePage.IsNull){
// Do stuff
}
Но я делаюне думаю, что это оптимальное решение моей проблемы.
Редактировать: поймать ошибку не вариант, так как я использую ITemplatePage в конструкторах других типов, которые я разрешаю, и так как я использую конструктор для разрешения этих типовЯ хочу, чтобы они возвращали экземпляр, созданный с помощью конструктора без параметра ITemplatePage, а не cсыпь.