如何通过 Nuget 包中打包的 .NET Core 扩展添加路由或视图?

M U*_*M U 0 c# asp.net-core-mvc asp.net-core

我正准备构建一个应用程序,我很可能会为其他客户一次又一次地使用大部分代码。

在一个地方管理代码并能够更新应用程序的最佳方法是将它放在私有 Nuget 包中。

为了实现它,我需要能够在控制器中使用 MVC,例如[HttpGet]等。我了解如何添加我的所有服务并使它们在应用程序中可用,如单例等,但我找不到任何关于我如何做的方法以这种方式添加端点或视图?

是否有可能通过调用来附加我所有的控制器等services.AddMyModule()

pok*_*oke 5

应用程序部件文档一章涵盖了这一点。基本上,默认情况下,ASP.NET Core 会自动从其他程序集中选取控制器,只要它们在您的项目中被引用。

因此,对于您的情况,如果项目依赖于该 NuGet 包,并且 NuGet 包包含控制器和其他应用程序部分,则应自动选取它:

默认情况下,MVC 将搜索依赖关系树并找到控制器(甚至在其他程序集中)。要加载任意程序集(例如,从编译时未引用的插件),您可以使用应用程序部件。

如果您需要对此进行更多控制并且默认设置不适合您,您仍然可以像这样明确地将程序集添加为应用程序部件:

services.AddMvc()
    .AddApplicationPart(typeof(SomeTypeInThatAssembly).Assembly);
Run Code Online (Sandbox Code Playgroud)

如果您不想要默认行为,您也可以显式删除程序集:

services.AddMvc()
    .ConfigureApplicationPartManager(m =>
    {
        var part = m.ApplicationParts.FirstOrDefault(p => p.Name == "AssemblyNameToRemove");

        if (part != null)
            m.ApplicationParts.Remove(part);
    });
Run Code Online (Sandbox Code Playgroud)

所以基本上,如果您(和您的用户)可以接受默认行为,您只需在该程序集中定义您的控制器就可以了。请记住,对于要包含在装配中的视图,您需要确保启用了视图编译