使用了autofac作为ioc容器,使用Autofac.Extras.DynamicProxy2做为方法拦截器,缓存面向方法,直接在方法上添加CachingAttribute特性便可。java
方法拦截器是AOP面向方面编程的一个重要体现,将咱们的功能点设计出现,与现有系统解耦,而后注入到项目里,哪些地方须要这个功能,就在哪一个地方注入它。编程
AOP是以IOC容器为基础的,因此你的拦截器组件也须要提早被注入到ioc容器里,而且,如今不管是java仍是.net,都提倡统一管理对象,而不是用new来生产对象,这一点也是面向接口编程的一种体现,而你在业务层进行对象传递时,永远依赖的是抽象,而不会依赖具体的实现!缓存
名称由key和value组成ui
[Caching(CachingMethod.Get, value = "time")] DateTime GetTime(int id);
当调用为GetTime(1)
时,产生的缓存key值以下:.net
key="DataSetCache_IUserInfoService_time" value="id_1"
builder.RegisterType<CachingBehavior>(); builder.RegisterType<DefaultUserInfoService>() .As<IUserInfoService>() .InstancePerLifetimeScope() .InterceptedBy(typeof(CachingBehavior)) .EnableInterfaceInterceptors();
// 下面两句表示将CachingBehavior拦截器绑定到接口上 .InterceptedBy(typeof(CachingBehavior)) .EnableInterfaceInterceptors();
[Caching(CachingMethod.Get,value="time")] DateTime GetTime();
咱们能够在接口的方法上添加这个特性,也能够在接口的实现类的方法上添加这个特性,根据缓存的影响程度去添加。若是缓存对接口全部实现都启做用,就放在接口方法上,反之放在类的方法上。设计
get
:通常做用在带有返回值的方法上,缓存名称为项目名+类名+value,当缓存存在时,直接返回,当不存在时,执行方法后,把返回值存入缓存,再返回。remove
:删除某个缓存,它直接把缓存名称value做为remove的参数注入。