c# - NetCORE 中的 BuildManager.AddReferencedAssembly
问题描述
我有 2 个带有 net core 的 web api 项目。1.- 基础网络 API。2.-联系web api。
我可以从基本 web api 动态加载联系人 web api。但未加载实体和层程序集。要使联系人 Web api 正常工作,我必须在基本 Web api 中手动添加引用实体和层程序集。在 NET Framework 中,我使用 BuildManager.AddReferencedAssembly,但在 net core 中不存在。如何使用 net core 添加动态引用?谢谢。
解决方案
我在 MVC 工作,那个项目是在插件系统上的。在这个项目中,我还使用“BuildManager.AddReferencedAssembly”方法来添加程序集的引用。不幸的是,这种方法只能在框架 4.x 中使用。
经过一些研究,我在这个地址上找到了解决这个问题的方法:
https://github.com/simplcommerce/SimplCommerce
您可以分析此项目以改进您的解决方案。(我假设您正在使用插件系统)
但是,如果你只需要一个方法来替换“BuildManager.AddReferencedAssembly”方法,你可以使用这个:
static void AddApplicationPart(IMvcBuilder mvcBuilder, Assembly assembly)
{
var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
foreach (var part in partFactory.GetApplicationParts(assembly))
{
mvcBuilder.PartManager.ApplicationParts.Add(part);
}
var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(assembly, throwOnError: false);
foreach (var relatedAssembly in relatedAssemblies)
{
partFactory = ApplicationPartFactory.GetApplicationPartFactory(relatedAssembly);
foreach (var part in partFactory.GetApplicationParts(relatedAssembly))
{
mvcBuilder.PartManager.ApplicationParts.Add(part);
}
}
}
要使用此方法,您需要 IMvcBuilder。您可以从如下代码中获取它:
IMvcBuilder _mvcBuilder = services.AddMvc();
“服务”变量必须是从 IServiceCollection 派生的类型。简单地说,您可以在 StartUp 类的 ConfigureServices 方法中找到它。
最后,我可以满怀信心地说,我已经测试过了,它有效。
推荐阅读
- matlab - 如何计算在 .mat 文件中找到的相同字符(MATLAB)
- python - Python - 删除基于行的特定值
- node.js - 网站和 Electron 应用程序之间的通信
- sql - 在sql中过滤
- concurrency - Azure Functions 并发和缩放行为
- docker-compose - 为 azerothcore docker build 设置 lua_scripts 目录
- c++ - 当 getline() 读取的行大于系统内存时会发生什么?
- java - 当我输入负数时,斐波那契数列“nth term finder”似乎不起作用
- go - 为什么 Golang URL lib 总是插入'://'?
- file - PermissionError:[Errno 13] 权限被拒绝:“数据”