应用程序部件
MSDN 说明:应用程序部件是对应用资源的抽象化, 借助应用程序部件,ASP.NET Core 可以发现控制器、视图组件、标记帮助程序、Razor Pages、Razor 编译源等。
核心类:
ApplicationPart
ApplicationPartFactory 从程序集中返回一个或多个ApplicationPart实例的。默认情况下,AspNet 核心构建工具发现引用MVC特性的依赖关系(在依赖关系树中),并将它们作为ApplicationPartAttribute添加到程序集(在构建时)。
在ASP.NET Core应用程序启动时,它使用applicationpartmanager作为ApplicationParts添加外部程序集。默认情况下,ApplicationPartManager搜索“ApplicationPartAttribute”。
功能提供程序
应用程序功能提供程序用于检查应用程序部件,并为这些部件提供功能。 以下 ASP.NET Core 功能有内置功能提供程序:
- ControllerFeatureProvider
- TagHelperFeatureProvider
- MetadataReferenceFeatureProvider
- ViewsFeatureProvider
RazorCompiledItemFeatureProvider
如何把外部程序添加为asp.net core 的部件,比如控制器。
public interface IExtendController { } public class AppExtendControlleFeatureProvider : ControllerFeatureProvider { protected override bool IsController(TypeInfo typeInfo) { if (typeof(IExtendController).IsAssignableFrom(typeInfo)) { if (!typeInfo.IsInterface && !typeInfo.IsAbstract && !typeInfo.IsGenericType && typeInfo.IsPublic) { return true; } } return false; } }
如上所示,1.定义一个接口. 2.继承控制器功能程序 默认如果实现IExtendController的普通类为MVC的Controller。3.创建一个AP.NET core MVC 项目橙色为修改部分,
ApplicationPartManager的 FeatureProviders 添加我们创建的AppExtendControlleFeatureProvider
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews().ConfigureApplicationPartManager (t => t.FeatureProviders.Add(new AppExtendControlleFeatureProvider())); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
添加测试的控制器
public class TestAppCon : IExtendController { public string GetAmoString() { return "Just Test Value"; } }
通过web访问TestAppCon的Action 正确获得了我的的结果。
标签:core,asp,typeInfo,app,程序,应用程序,Controller,public From: https://www.cnblogs.com/RunStone/p/16791167.html