Microsoft Unity界面拦截和构造函数注入之间的区别

Bub*_*ble 2 c# unity-container code-injection unity-interception

asp.net unity中的接口拦截和构造函数注入有什么区别?我缺乏对Unity的理解我正在研究一个旧项目和unity.config,有些像这样,

<register type="ICRIC2012TrialUserService" mapTo="CRIC2012TrialUserService">
        <lifetime type="perthread"/>
        <interceptor type="InterfaceInterceptor"/>
        <policyInjection/>
</register>
Run Code Online (Sandbox Code Playgroud)

但有些人没有

<interceptor type="InterfaceInterceptor"/>
Run Code Online (Sandbox Code Playgroud)

但是在项目中,这些类和接口以相同的方式工作,就像这样

private readonly IIncomingEstimateService _incomingEstimateService;

        public ContractService(IIncomingEstimateService incomingEstimateService)
        {
            _incomingEstimateService = incomingEstimateService;
        }
Run Code Online (Sandbox Code Playgroud)

Seb*_*ber 5

拦截和注射是两回事.

拦截通常用于向类添加横切关注点(如日志记录),而无需一次又一次地实现它们.Unity中的拦截通过生成接收传入方法调用的代理并通过所谓的拦截器管道引导它们直到调用最终到达原始目标对象来工作.

这两篇文章介绍了如何拦截Unity的工作原理.

Unity中的拦截器

使用Unity拦截

构造函数注入是实现依赖注入模式的一种方法.它是一种模式,告诉您如何构建应用程序以解耦组件.

网上有很多文章.

控制容器的反转和依赖注入模式

依赖注入模式 - 它是什么,为什么我关心?

拦截和注射是完全不同的.但是一些依赖注入容器(如Unity)允许您同时执行这两个操作.您可以将依赖项注入类中,并使用容器基础结构拦截对这些类的调用.