有没有办法在没有注入的情况下实现这一点?Topic是一个UserControl。我正在尝试检查标题并将其设置在属性中。
public partial class Topic: TopicBase
{
[Topic(Title = "My Topic")]
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
}
当我寻找属性时,我在TopicBase.cs中得到null
protected override void OnInit(EventArgs e)
{
var topicAttr = Attribute.GetCustomAttribute(this.GetType(), typeof(TopicAttribute)); //topicAttr is null here.
if (topicAttr != null)
{
SetTopic(((TopicAttribute)topicAttr).Title);
}
}
您正在检查类型的属性。属性位于方法上。要么更改查询,要么按照查询的期望将属性放在类型上:
[Topic(Title = "My Topic")]
public partial class Topic : TopicBase
{
}
正如nvoigt所说,您正在尝试查找类的属性,但您应该使用方法的MemberInfo。
像这样:
MethodInfo methodInfo = typeof(Topic).GetMethod("OnInit", BindingFlags.NonPublic | BindingFlags.Instance);
var attribute = methodInfo.GetCustomAttribute(typeof(TopicAttribute));