Microsoft Unity разница между перехватом интерфейса и внедрением конструктора

В чем разница между перехватом интерфейса и внедрением конструктора в asp.net unity? Мне не хватает понимания 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;
        }

person Bubble    schedule 18.07.2012    source источник


Ответы (1)


Перехват и инъекция - разные вещи.

Перехват обычно используется для добавления сквозных задач (таких как ведение журнала) в классы без необходимости реализовывать их снова и снова. Перехват в Unity работает путем создания прокси-серверов, которые принимают входящие вызовы методов и направляют их через конвейер так называемых перехватчиков, пока вызов, наконец, не достигнет исходного целевого объекта.

В этих двух статьях рассказывается, как работает перехват в Unity.

Перехватчики в Unity

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

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

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

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

Шаблон внедрения зависимостей — что это такое и почему меня это волнует?

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

person Sebastian Weber    schedule 18.07.2012