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 国际」许可协议进行许可。

posted @   奔跑石头  阅读(483)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示