深入探究ASP.NET Core Startup初始化问题
前言
Startup类相信大家都比较熟悉,在我们使用ASP.NETCore开发过程中经常用到的类,我们通常使用它进行IOC服务注册,配置中间件信息等。虽然它不是必须的,但是将这些操作统一在Startup中做处理,会在实际开发中带来许多方便。当我们谈起Startup类的时候你有没有好奇过以下几点
- 为何我们自定义的Startup可以正常工作。
- 我们定义的Startup类中ConfigureServices和Configure只能叫这个名字才能被调用到吗?
- 在使用泛型主机(IHostBuilder)时Startup的构造函数,为何只支持注入IWebHostEnvironment、IHostEnvironment、IConfiguration。
- ConfigureServices方法为何只能传递IServiceCollection实例。
- Configure方法的参数为何可以是所有在IServiceCollection注册服务实例。
- 在ASP.NETCore结合Autofac使用的时候为何我们添加的ConfigureContainer方法会被调用。
- 带着以上几点疑问,我们将在本篇文章中探索Startup的源码,来了解Startup初始化过程到底为我们做了些什么。
Startup的另类指定方式
在日常编码过程中,我们通常使用UseStartup的方式来引入Startup类。但是这并不是唯一的方式,还有一种方式是在配置节点中指定Startup所在的程序集来自动查找Startup类,这个我们可以在GenericWebHostBuilder的构造函数源码中的找到相关代码[点击查看源码