我在“姓名”字段中定义了以下属性:
[Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(MyResources))]
[Display(Order = 0, Name = ResXStrings.UserName, ResourceType = typeof(MyResources))]
public string Name { get; set; }
我想创建一个如下所示的自定义属性:
[MyAttribute(DisplayName = "Username", ErrorMessage = "ValidationErrorRequiredField", ResourceType = typeof(MyResources))]
public string Name { get; set; }
在代码中定义了另外两个(必需和显示)属性。
如何实现这个?
更新 这是不可能的。 感谢所有帮助回答我问题的人。
答案 0 :(得分:2)
我很确定你无法做到这一点。问题是属性只是附加到类型,方法,属性等的一些元数据。它本身不会做任何事情。
由代码消耗元数据来决定如何处理它以及如何操作。
即使某个属性包含某些功能代码(例如System.Web.Mvc.ActionFilterAttribute),正在使用调用它的属性
。换句话说,要实现您想要的目标,您必须更改属性的使用者以了解您的新属性。
答案 1 :(得分:2)
我认为你不能。由于属性的使用者经常按类型找到它们,因此新属性必须 一个RequiredAttribute和一个DisplayAttribute。 C#不支持多重继承,因此无法创建这样的类。
答案 2 :(得分:1)
现在可以使用自定义属性执行此操作。您可以尝试实现ICustomTypeDescriptor
并添加您想要的任何属性,但我怀疑它在每个场景中都受支持。
答案 3 :(得分:0)
无法直接,但您可以通过应用程序中的某些调整进行此操作,但我不建议这样做< / strong>因为,如果你这样做,你就违反SRP大时间,将两个不同的职责放入同一个班级。
请记住,课程必须始终有一个 改变的理由。