最近工作都用 .NET Core Mvc 做开发,工作中遇到了比较特殊的需求:能不能在不停止网站,不重启,在网站运行中加载新的 Controller 呢?
基于这个需求,分析下来,那就是动态加载一个已经编译好的 dll 文件到当前运行时中,不用想,肯定使用到反射,读取类型,把 Controller 类型的类加载到 MVC 的 controller 集合中。
嗯,中国特色思维,先百度谷歌看看有么有现成的吧!结果百度来谷歌去,没有找到相关内容,都怪 .NET Core 太新了,网络上还没有太多相关的东西,只找到一个提问 :
ASP.Net Core register Controller at runtime
https://stackoverflow.com/questions/46156649/asp-net-core-register-controller-at-runtime
注:里面有我的回答哦 => cnxiaoby
基于这个提问,我们知道了,ApplicationPart 是用来管理运行时中加载的 dll 的,只要能把带有Controller的dll 加载到ApplicationParts,刷新一下相关的 runtime 就能实现了吧。有了思路,就先看看 .NET Core MVC 源码吧,从里面找找看有没有相关的 Controller 缓存的集合,看能不能动态加载进去。
由于工作忙,断断续续看了几天源码,过程波折就不细说了,最终找到了:
https://github.com/aspnet/Mvc/blob/rel/2.0.0/src/Microsoft.AspNetCore.Mvc.Core/Inte