2016-11-18 132 views
0

标题将其总结。假设我定义了一个自定义属性IsModule。它用于我用来加载所有模块的枚举类型。如果枚举类型具有不同的自定义属性,则需要自定义枚举属性

即assembly.GetCustomAttributes(typeof运算(IsModule),真)

一旦我有有属性的所有枚举,我遍历每个枚举和读取不同的自定义属性ModuleData,这样我可以将它插入到数据库。

我想要做的是通过要求ModuleData属性覆盖每个枚举值(如果该类型上存在IsModule属性)来进行开发人员验证。

回答

2

有没有直接的语言功能来帮助。但是,这里有三个备选选项:

  1. 使Visual Studio(或ReSharper)加载项在编辑期间检查此操作;
  2. 制定FXCop规则,该规则将检查何时运行静态代码分析;
  3. 做一个单元测试,将枚举所有程序集并进行检查。

请注意,在单元测试(选项3)的情况下,您需要以确保程序的所有程序集都已加载的方式运行它。

+1

单元测试是一个好主意 –

+0

#1有我的兴趣达到顶峰。我可以为开发人员编写一个完整的执法库。从来没有做过这个,你有一个好的资源开始? – JDBennett

+0

@JDBennett检查SO:http://stackoverflow.com/search?q=%5Bfxcop%5D+custom+rule ;-) –

1

您可以使用称为模块初始值设定项(或模块构造函数)的东西来扫描您的模块是否符合所述条件的枚举并抛出一些异常。

的事情是,当IL支持的话,C#本身并没有,所以你需要一些“帮助” :)

一种可能的实现可以在这里找到:

https://github.com/fody/moduleinit