asp.net-core-webapi - ASP.NET Core - 引用程序集中的控制器
问题描述
我有一个 .NET Core 3.1 的通用库,我在其中创建了一个 WEB API 控制器,用于与多个应用程序共享。
为了将它添加到应用程序中,我希望是这样的(从 3.0 开始):
services.AddControllers()
.PartManager.ApplicationParts.Add(new AssemblyPart(assembly));
但是,如果我只是简单地引用公共项目并调用 services.AddControllers()
,控制器会自动添加......这有点令人毛骨悚然。显然, AddControllers() 遍历所有引用项目中的每个程序集,并且只是愚蠢地添加它在此过程中找到的每个控制器。
我找不到有关此行为的文档。我能看到控制它的唯一方法是使用控制器创建另一个项目,并在需要时引用它。
这样做的正确(或预期)方式是什么?
解决方案
我怀疑这样做的预期/正确方法是不要将带有控制器的项目与其他带有控制器的项目一起引用(即使您引用的项目引用了带有控制器的项目等)。
即任何业务逻辑都应该由两个web api 分别在类库之类的东西中引用。
如果您确实遇到这种情况,则解决方法如下;
services.AddControllers().ConfigureApplicationPartManager(o =>
{
o.ApplicationParts.Clear();
o.ApplicationParts.Add(new AssemblyPart(typeof(Startup).Assembly));
});
Startup 在哪里引用您所在的课程。
在 .NET 6 中处理它的方式可能略有不同。
推荐阅读
- java - 无法使用 Google Places api 限制每个循环
- php - 下拉菜单从数据库中获取数据,想要创建另一个下拉菜单来乘以该数字
- ruby - 更改表大小虾
- javascript - 如何在多个 CraftyJS 组件上应用重力?
- python - 来自重复列表的有序对
- php - 如何检查返回值属于哪个函数
- sql-server - 在 VB.NET 中,谁能 Iet 包含特定表的所有数据库
- qt - 如何根据配置向 .pro 文件添加逻辑?
- mongodb - Mongoose 使用 id 数组填充
- python - 烧瓶在 appengine 和 dev_appserver 上处理 uriencoded 参数的方式不同