В 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

Использование перехвата с Unity

Внедрение в конструктор является одним из способов реализации шаблона внедрения зависимостей. Это шаблон, который говорит вам, как структурировать ваше приложение для разделения компонентов.

В интернете много статей.

Инверсия управляющих контейнеров и шаблон внедрения зависимостей

Модель внедрения зависимости - что это такое и почему меня это волнует?

Перехват и инъекция - это нечто совершенно другое. Но некоторые контейнеры Dependency Injection (например, Unity) позволяют вам делать и то, и другое. Вы можете внедрить зависимости в классы и перехватывать вызовы этих классов, используя инфраструктуру контейнера.

Другие вопросы по тегам