【发布时间】:2021-02-18 03:16:09
【问题描述】:
我和this question有同样的问题。问题是,即使在属性的构造函数中使用命名参数,我仍然得到一个空集合。
这是我的属性定义:
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 { /// }
这是我通过Controller的属性的方式:
var attributeData = controllerInfo
.CustomAttributes
.FirstOrDefault(attrs => attrs.AttributeType == typeof(MenuItemAttribute))
.NamedArguments;
如果我使用ConstructorArguments 而不是NamedArguments,我可以看到参数。
我错过了什么?
【问题讨论】:
-
属性的属性不应该是公开的吗?
-
@Miamy 技术上不需要
标签: c# reflection arguments