asp.net unity中的接口拦截和构造函数注入有什么区别?
我对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;
}
答案 0 :(得分:5)
拦截和注射是两回事。
拦截通常用于向类添加横切关注点(如日志记录),而无需反复执行它们。 Unity中的拦截通过生成接收传入方法调用的代理并通过所谓的拦截器管道引导它们直到调用最终到达原始目标对象来工作。
这两篇文章介绍了如何拦截Unity。
构造函数注入是实现依赖注入模式的一种方法。这是一种模式,告诉您如何构建应用程序以解耦组件。
网上有很多文章。
Inversion of Control Containers and the Dependency Injection pattern
The Dependency Injection Pattern – What is it and why do I care?
拦截和注射是完全不同的。但是一些依赖注入容器(如Unity)允许您同时执行这两个操作。您可以将依赖项注入类中,并使用容器基础结构拦截对这些类的调用。