找到控制器DiplayName并显示它

时间:2019-04-09 12:01:00

标签: c# asp.net-core reflection

我在我的项目中编写此代码以查找控制器列表。

    public IEnumerable<Type> GetControllerDescovery(Assembly assemblies)
    {
        var controllers = assemblies.GetExportedTypes()
                                                    .Where(t => typeof(ControllerBase)
                                                    .IsAssignableFrom(t))
                                                    .Select(t => t).
                                                    ToList();
        return controllers;
    }

它向我显示此输出:

"IranNews.Controllers.V1.CategoryController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"IranNews.Controllers.V1.RoleManagerController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"IranNews.Controllers.V1.UserController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"IranNews.Controllers.V1.ValuesController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

但是我需要从[Display(Name = "UserManager")]获得控制者的名字

然后告诉我:UserManager

我该怎么做?????

1 个答案:

答案 0 :(得分:0)

尝试一下:

typeof(ControllerBase)
.GetProperties()
.Select(x => x.GetCustomAttribute<DisplayAttribute>())
.Where(x => x != null)
.Select(x => x.Name)
.ToList();

更新: 这是一个工作示例:

Assembly.GetExecutingAssembly().GetExportedTypes()
        .Where(t => typeof(ControllerBase).IsAssignableFrom(t))
        .Select(t => t.GetCustomAttribute<DisplayAttribute>())
        .Where(x => x != null)
        .Select(x => x.Name)
        .ToList();