c# - 如何从属性中获取构造函数命名参数
问题描述
我和这个问题有同样的问题。问题是,即使在属性的构造函数中使用命名参数,我仍然得到一个空集合。
这是我的属性定义:
public class MenuItemAttribute : Attribute
{
ApplicationCategoryEnum ApplicationCategory { get; }
string ControllerDisplayName { get; }
bool IsDefaultRoute { get; }
public MenuItemAttribute(ApplicationCategoryEnum applicationCategory, string controllerDisplayName, bool isDefaultRoute)
{
ControllerDisplayName = controllerDisplayName;
ApplicationCategory = applicationCategory;
IsDefaultRoute = isDefaultRoute;
}
}
这就是我使用它的方式:
[MenuItem(
applicationCategory: ApplicationCategoryEnum.CONTROLPANEL,
controllerDisplayName: "Account Management",
isDefaultRoute: false)]
public class AccountController : Controller { /// }
这就是我如何通过控制器的属性:
var attributeData = controllerInfo
.CustomAttributes
.FirstOrDefault(attrs => attrs.AttributeType == typeof(MenuItemAttribute))
.NamedArguments;
如果我使用ConstructorArguments
而不是NamedArguments
.
我错过了什么?
解决方案
目前,您的所有参数都是位置参数,因此它们以ConstructorArguments
.
正如文档中所写:
属性类的每个非静态公共读写字段和属性都为属性类定义了一个命名参数。
将您更改MenuItemAttribute
为例如:
public class MenuItemAttribute : Attribute
{
ApplicationCategoryEnum ApplicationCategory { get; }
public string ControllerDisplayName { get; set; }
public bool IsDefaultRoute { get; set; }
public MenuItemAttribute(ApplicationCategoryEnum applicationCategory)
{
ApplicationCategory = applicationCategory;
}
}
和用法
[MenuItem(ApplicationCategoryEnum.CONTROLPANEL, ControllerDisplayName = "asdsa", IsDefaultRoute = true)]
将为您提供 2 个集合中的元素NamedArguments
。
推荐阅读
- css - 合并div?
- python - Python exec() 权限在 Apache 服务器中被拒绝:/cgi_bin/*.py
- angular - 尝试为 RouterOutlet 和 NgIf 配置 _source 的角度和错误
- python-3.x - 如何在类上注释 __add__(双下划线)方法的类型?
- javascript - lodash fp 和重构一些现有代码
- sql-server - 如何使用 sqlcmd 创建 SQL Server 2017 数据库脚本
- node.js - Firebase Storage 在图片上传时抛出错误(Nodejs)
- java - JTable在未提交时从单元格获取值
- python - 如果 for 循环中的所有元素都没有数据,则添加条件
- java - 如何触发 intellij 更新 MANIFEST.MF 文件