架构师_程序员

查看: 95|回复: 0

[.NET Core] ASP.NET Core 使用 Autofac 属性注入 NullReferenceException 异常分析

[复制链接]
发表于 2020-9-12 20:57:21 | 显示全部楼层
Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理。
关于 Autofac 容器,我也是老生常谈了,写过很多文章:

在MVC 中使用 autofac 实现自动注册
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Circular component dependency detected" 错误解决
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core使用Autofac两种方式实现IOC注入
https://www.itsvse.com/thread-7563-1-1.html

autofac 组件的实例范围
https://www.itsvse.com/thread-5080-1-1.html

mvc Controller Autofac 属性注入控制器
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core依赖注入使用自带的IOC容器
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core使用Autofac实现IOC注入
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core使用Autofac实现AOP拦截
https://www.itsvse.com/thread-7566-1-1.html


新建一个 ASP.NET Core 3.1 的项目,通过 nuget 引用 autofac 相关的包,如下:


我们新建一个 ITest 接口和实现,代码如下:




新建一个 BaseController 基类控制器,其他控制器继承该抽象类,在基类中添加 ITest 属性,代码如下:

让 WeatherForecastController 继承于 BaseController  抽象类,添加测试方法如下:

在 Startup 类中的 ConfigureContainer 方法注册接口和设置控制器属性输入的方式,代码如下:

尝试访问:http://localhost:29974/weatherforecast/test

报空引用 NullReferenceException 异常,如下图:

QQ截图20200912204436.jpg

NullReferenceException: Object reference not set to an instance of an object.


通过,构造函数注入 ITest 接口,调用其方法,测试通过,可以正常调用

异常原因

Controller 的实现较为特殊,Controller 默认是不会通过自带容器来 Resolve&Activate 的,是通过MVC自身管理的,但是微软提供了这样的方法:

可以通过调用 AddControllersAsServices() 方法来让 Controller 使用自带容器,其主要源代码如下:

QQ截图20200912204659.jpg

默认 Startup 对象中的 ConfigureServices 方法配置如下:

我们修改为:

或者:

ServiceBasedControllerActivator 源码如下:

配置完成后,直接从 DI 容器加载控制器,控制器将从 Autofac 解析服务,我们配置的属性注入就可以生效了。如下图:

QQ截图20200912205215.jpg

最后附上,asp.net core 源码地址:

https://github.com/dotnet/aspnetcore

(完)





上一篇:Hangfire可正常添加数据,但因为异常一直在执行
下一篇:求助大神,E4A用如何将Sqlite数据用高级表格展示?
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-9-25 02:44

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表