首页 > 解决方案 > ASP.NET Core - 引用程序集中的控制器

问题描述

我有一个 .NET Core 3.1 的通用库,我在其中创建了一个 WEB API 控制器,用于与多个应用程序共享。

为了将它添加到应用程序中,我希望是这样的(从 3.0 开始):

services.AddControllers()
        .PartManager.ApplicationParts.Add(new AssemblyPart(assembly));

但是,如果我只是简单地引用公共项目并调用 services.AddControllers(),控制器会自动添加......这有点令人毛骨悚然。显然, AddControllers() 遍历所有引用项目中的每个程序集,并且只是愚蠢地添加它在此过程中找到的每个控制器。

我找不到有关此行为的文档。我能看到控制它的唯一方法是使用控制器创建另一个项目,并在需要时引用它。

这样做的正确(或预期)方式是什么?

标签: asp.net-core-webapiasp.net-core-3.1

解决方案


我怀疑这样做的预期/正确方法是不要将带有控制器的项目与其他带有控制器的项目一起引用(即使您引用的项目引用了带有控制器的项目等)。

即任何业务逻辑都应该由两个web api 分别在类库之类的东西中引用。

如果您确实遇到这种情况,则解决方法如下;

services.AddControllers().ConfigureApplicationPartManager(o =>
            {
                o.ApplicationParts.Clear();
                o.ApplicationParts.Add(new AssemblyPart(typeof(Startup).Assembly));
            });

Startup 在哪里引用您所在的课程。

在 .NET 6 中处理它的方式可能略有不同。


推荐阅读