asp.net - 启动项目 ASP.NET Core 3.1 后在运行时添加程序集控制器和视图
问题描述
我想在运行时加载程序集,而不是启动(在启动应用程序之后)。为此,我在 Internet 和 StackOverflow 上搜索了许多解决方案。我在运行时在 ASP.Net Core register Controller找到了这个答案
cnxiaoby 说:创建 ActionDescriptor 并在启动时注册它。然后在任何你可以使用的地方_partManager.ApplicationParts.Add(assembly);
一切都很好,但我可以在运行时添加控制器类,如果我想在启动应用程序后在运行时添加 Razor 视图,我会得到“未找到视图索引”
通过此代码添加视图:
var newView = AssemblyLoadContext.Default.LoadFromAssemblyPath(data.FullName);
var viewAssembly = new CompiledRazorAssemblyPart(newView);
_partManager.ApplicationParts.Add(viewAssembly);
通过此代码添加控制器:
var targetAssembly = new AssemblyPart(assembly);
_partManager.ApplicationParts.Add(targetAssembly);
之后,我将自定义操作描述符设置为:
MyActionDescriptorChangeProvider.Instance.TokenSource.Cancel();
编辑: 该代码位于 HomeController.cs 和 SampleAction 如果我将所有代码放在 HomeController.cs 和 Index“Action”中,一切都很好。如果将代码移动到其他操作(在应用程序运行并开始运行其他操作之后),代码不起作用,我会看到该错误。
- 我忘记了什么?
- 为什么项目的第一次行动中的代码很好,但不适合其他人?
- 第一个动作和其他动作有什么区别?
解决方案
推荐阅读
- keras - Conv2D 中的填充给出了错误的结果?
- reactjs - ReactJS - 按升序和降序排序
- gradle-release-plugin - 将 tagTemplate 作为命令行参数传递 - Gradle Release Plugin
- javascript - 当nativescript中发生navigateTo时如何在框架元素上发出事件?
- django-rest-framework - 如何按日期排序并将未读消息放在最前面?
- rust - 将 Rust 函数作为参数传递给 C 函数
- python - 指示未定义变量的 Python 列表理解
- drake - 在 Ubuntu 18.04 上安装 Drake 的问题
- unit-testing - 如何监视从模拟文件返回的属性
- windows - 在带有 VS2013 x64 或 VS2017 x64 的 Windows 10 上安装 LuaJIT LuaRocks Torch7(在 Torch7 上失败)