asp.net core 动态Controller
应用程序部件
MSDN 说明:应用程序部件是对应用资源的抽象化, 借助应用程序部件,ASP.NET Core 可以发现控制器、视图组件、标记帮助程序、Razor Pages、Razor 编译源等。应用程序部件的主要用途是允许您配置应用程序,以便从程序集发现(或避免加载)MVC特性。
MVC应用通过应用部件加载MVC功能特性。
核心类:
ApplicationPart
ApplicationPartFactory 从程序集中返回一个或多个ApplicationPart实例的。
AspNet 核心构建工具发现引用MVC特性的依赖关系(在依赖关系树中),并将它们作为ApplicationPartAttribute添加到程序集(在构建时)。 在ASP.NET Core应用程序启动时,它使用applicationpartmanager作为ApplicationParts添加外部程序集。
AssemblyPart 封装程序集引用并公开类型和编译引用。
功能提供程序
应用程序功能提供程序用于检查应用程序部件,并为这些部件提供功能。 以下 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 正确获得了我的的结果。
作者:RunStone
出处:https://www.cnblogs.com/RunStone/p/16791167.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
asp.net core
, applicationpart
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?