Это, скорее всего, вопрос о нобе.Autofac - охватывает ли область видимости в течение всего времени использования, если она существует?
Предположим, мне нужно решить какой-то интерфейс, скажем, IFunctional в обработке веб-запросов, который зарегистрирован как экземпляр на всю продолжительность жизни в конфигурации autofac. Но прежде чем я это сделаю, я уже решил IService, который зарегистрирован как единственный экземпляр, а также имеет зависимость от IFunctional. Поэтому IService уже разрешен в корневой области, а функция IFunctional уже разрешена в корневой области. Теперь пытается решить IFunctional, скажем, обработки запроса веб, будет это:
- создать новый экземпляр IFunctional в «веб-область запроса»
- ищет экземпляр IFunctional в дереве областей и найти один в корне области и использовать его?
Для меня первый вариант имеет больше смысла, но я бы предпочел убедиться. Благодаря!
Спасибо за быстрый ответ! Это разрушает мои неуверенности :) – JackMag
Я не предлагаю вам использовать за всю жизнь в одиночных играх. Это может нарушить ваш дизайн. Кроме того, это может быть очень опасно, если они одноразовые. Потому что _per lifetime_ в слове, которое вы ожидаете, начинается и заканчивается. Используйте фабрики или следуйте за SRP. Может быть, IService не нуждается в IFunctional, возможно, это просто нужны некоторые части, которые могут быть одноточечными или зависимыми. –
Не совсем получить эту часть. Вы указываете, что использование зависимости на всю жизнь в объекте с одним экземпляром может быть опасным, потому что каждый объект жизни будет жить до тех пор, пока один экземпляр? И если есть связанный ресурс, он будет удерживаться на всю жизнь программы? Предположим, что служба logging (singleton) нуждается в транзакционном обслуживании (за время жизни) для записи в БД. Кажется, это не опасно для меня. Если вы выполняете много протоколирования, это может быть неэффективно идти на зависимый путь. Похоже, что и с точки зрения SRP, так как я считаю, что SRP относится к классам, а не к экземплярам. – JackMag