# 拦截器
具体代码可查看
LessSharp.Service
的Interceptors
目录下的类
框架使用了一个较为轻量级的AOP
框架(AspectCore
)实现拦截效果。具体实现原理可查看博客(Asp.net Core 3.1基于AspectCore实现AOP,实现事务、缓存拦截器)。以下为框架目前提供的拦截器,如果需要实现自定义拦截器,可在此目录下进行创建。
注意
拦截器只能拦截虚方法或实现接口的方法
# 事务拦截器
在需要实现事务统一性的方法上加上特性,即可自动实现事务
[TransactionInterceptor]
public virutal IActionResult Test12()
{
var id = _userService.Save(new Dto.Sys.UserSaveDto{
LoginName = "用户名",
Role = -1
})
return Content(id.ToString());
}
# 缓存拦截器
[CacheInterceptor("Config")]//可传入一个缓存Key,如果不传Key,则以方法名称加类加命名空间做了Key
public virtual async Task<string> GetValueByKey(string key)
{
return await this.DbQuery.Where(e => e.Key == Enum.Parse<ConfigKey>(key)).Select(e => e.Value).FirstOrDefaultAsync();
}
# 缓存删除拦截器
这个拦截器在方法执行完成后,会把对应的缓存进行清除,一般用于更新已缓存数据的方法上
[CacheDeleteInterceptor("Config","ConfigList")]//
public virtual async Task SaveAsync(List<ConfigDto> dtos)
{
this.AutoSaveChanges = false;
foreach (var d in dtos)
{
await this.UpdateAsync(d);
}
await this.DbContext.SaveChangesAsync();
}
# 方法缓存删除拦截器
这个拦截器跟上面缓存删除拦截器作用差不多,主要用于CacheInterceptor
没传Key
的情况,需传对数据相同的Types
数组跟Methods
方法名称数据
[MethodCacheDeleteInterceptor(new Type[] { typeof(ConfigService) }, new string[] { nameof(ConfigService.GetListAsync) })]
public virtual async Task SaveAsync(List<ConfigDto> dtos)
{
this.AutoSaveChanges = false;
foreach (var d in dtos)
{
await this.UpdateAsync(d);
}
await this.DbContext.SaveChangesAsync();
}
← 缓存助手 接口路径的自动化生成 →