.NET Core 中如何在运行中加载 Controller ?

本文介绍了如何在.NET Core MVC应用程序运行时,通过反射加载已编译DLL中的Controller,实现不停服更新Controller。通过实现IActionDescriptorChangeProvider接口并注册到Services中,以及在运行时加载DLL,成功实现了Controller的动态加载。此技术可以用于网站动态更新和其他创新功能。
摘要由CSDN通过智能技术生成

最近工作都用 .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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值