В Microsoft Unity разница между перехватом интерфейса и инжектором конструктора
В чем разница между перехватом интерфейса и инжектором конструктора в единстве asp.net? У меня нет понимания DI с Unity. Я работаю над старым проектом и в Unity.config, например,
<register type="ICRIC2012TrialUserService" mapTo="CRIC2012TrialUserService">
<lifetime type="perthread"/>
<interceptor type="InterfaceInterceptor"/>
<policyInjection/>
</register>
но некоторые не имеют
<interceptor type="InterfaceInterceptor"/>
но в проекте эти класс и интерфейс работают одинаково, вот так
private readonly IIncomingEstimateService _incomingEstimateService;
public ContractService(IIncomingEstimateService incomingEstimateService)
{
_incomingEstimateService = incomingEstimateService;
}
1 ответ
Перехват и инъекция - две разные вещи.
Перехват обычно используется для добавления к классам сквозных задач (таких как ведение журналов) без необходимости реализовывать их снова и снова. Перехват в Unity работает путем генерации прокси, которые принимают входящие вызовы методов и направляют их через конвейер так называемых перехватчиков, пока вызов, наконец, не достигнет исходного целевого объекта.
Эти две статьи рассказывают, как работает перехват с Unity.
Использование перехвата с Unity
Внедрение в конструктор является одним из способов реализации шаблона внедрения зависимостей. Это шаблон, который говорит вам, как структурировать ваше приложение для разделения компонентов.
В интернете много статей.
Инверсия управляющих контейнеров и шаблон внедрения зависимостей
Модель внедрения зависимости - что это такое и почему меня это волнует?
Перехват и инъекция - это нечто совершенно другое. Но некоторые контейнеры Dependency Injection (например, Unity) позволяют вам делать и то, и другое. Вы можете внедрить зависимости в классы и перехватывать вызовы этих классов, используя инфраструктуру контейнера.