当前位置: 首页> 游戏> 网游 > 王烨辉简历_深圳市光明区住房和建设局官网_网站结构优化的内容和方法_优化大师卸载不了

王烨辉简历_深圳市光明区住房和建设局官网_网站结构优化的内容和方法_优化大师卸载不了

时间:2025/8/7 18:31:08来源:https://blog.csdn.net/m0_73847536/article/details/142278690 浏览次数:0次
王烨辉简历_深圳市光明区住房和建设局官网_网站结构优化的内容和方法_优化大师卸载不了

想用一个过滤器实现特定接口的审核日志记录,结果报了错,看了看感觉有些基础要补,所以想记录下来

错误:

在属性过滤器中使用了依赖注入,结果在应用在控制层接口时报了传参的错

//过滤器
public class AuditRecordFilter: ActionFilterAttribute
{private readonly ISysAuditRecordService _sysAuditRecordService; // 注入日志服务/// <summary>/// 会话管理接口/// </summary>private readonly TokenManager _tokenManager;public AuditRecordFilter( ISysAuditRecordService sysAuditRecordService, TokenManager tokenManager){_sysAuditRecordService = sysAuditRecordService;_tokenManager = tokenManager;}
...

控制层:

原因:

ASP.NET Core 框架中的生命周期管理服务解析机制。

在 ASP.NET Core 中,依赖项是通过依赖注入容器(DI容器)来解析的。这个容器会自动为需要依赖的对象(如服务、仓储等)提供相应的实例。

理论上,这些依赖应该由 ASP.NET Core 的 DI 容器注入。但是,如果你直接在控制器方法上使用属性形式的 [AuditRecordFilter],由于它是编译时静态定义的,框架不会通过依赖注入自动解析这些服务。这就是为什么在使用某些属性过滤器时,会有依赖项无法解析的错误。

ASP.NET Core 的属性过滤器(例如 [AuditRecordFilter])在编译时就已经创建。也就是说,过滤器实例在 ASP.NET Core 依赖注入容器有机会参与之前就已经被创建,因此 DI 容器无法为过滤器的构造函数注入依赖项。这导致你看到的错误提示,表明无法解析 ISysAuditRecordService 等依赖。

错误的原因是: 使用属性过滤器时,过滤器实例化发生在编译时,而非运行时,框架不会自动为这些属性过滤器提供依赖项。

解决方案:

改为使用TypeFilter 或 ServiceFilter

二者实现的区别

这里我用了TypeFilter ,在具体的过滤器中不需要特别改什么

//控制层接口标注[TypeFilter(typeof(AuditRecordFilter),Arguments =new object[] {3})]

其中的Arguments可用过滤器的构造函数拿到,这个可做接口区别判断之类的功能,更灵活一些 。

关键字:王烨辉简历_深圳市光明区住房和建设局官网_网站结构优化的内容和方法_优化大师卸载不了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: