GON*_*ale 17 .net attributes code-generation
我希望在.NET中的公共属性上设置一个属性,但是我无法访问explicit属性本身,因为这是在另一个文件中生成的代码.
我有这个领域:
public virtual string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望这样:
[ValidateNonEmpty("Name is required", ExecutionOrder = 1)]
public virtual string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的类被标记为部分,但您不能拥有部分属性.我以为我正在使用MetadataType类,这是动态数据和数据注释的一个新功能,但我觉得它只能用于动态数据,这是真的吗?
引文:http : //blogs.oosterkamp.nl/blogs/jowen/archive/2008/10/16/metadatatype-attribute.aspx http://blogs.msdn.com/davidebb/archive/2008/06/16/dynamic -data-和最相关的元数据,class.aspx
有没有办法我可以设置这个属性(即使通过web.config!)而不触及代码生成的类?
提前谢谢,格雷厄姆
Mar*_*ell 23
这是一个众所周知的滋扰; 您根本无法向生成的成员添加元数据.
这里有6个选项(按增加的顺序):
[ValidateNonEmpty("Name", "Name is required", ExecutionOrder = 1)]
- 然后将多个属性添加到分部类定义TypeDescriptionProvider
来提供动态元数据(很多很多工作) - 假设消费者尊重TypeDescriptor
; 大多数与绑定相关的消费者都这样做,但是,例如,Expression
(许多LINQ提供商使用)却没有我通常使用第一个选项取得成功,除非它是系统定义的属性([DisplayName]
等).如果[ValidateNonEmpty]
由动态数据定义,那么您可能无法执行此操作.
由于生成的类是部分类,因此以下内容应该起作用:
例如:
// Decorate the properties with attributes as required
public interface IMyInterface
{
[ValidateNonEmpty("Name is required")]
string Name { get; set; }
}
// This is the partial class I created, that implements the interface
public partial class MyGeneratedClass : IMyInterface
{
}
// This is the auto-generated class
public partial class MyGeneratedClass
{
public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我从geekswithblogs得到了这个想法.