实现其他属性的属性

时间:2019-05-06 10:33:29

标签: c# oop attributes

我想使用外观或代理库的已实现属性。 例如属性映射属性。

我想控制要在项目中使用哪些库属性。 某种DI或模块控件。 有没有一种简单的方法可以在不使用反射的情况下实现它?

将这两种类型的属性转换为一种的东西:

[MapsFromAndToProperty(typeof(fooClass), nameof(fooClass.PropertyName))]

[AdaptMember(name)]

进入

[MyAttributeToControlWhichOneToUse(typeof(fooClass), nameof(fooClass.PropertyName))]

感谢您的关注。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如评论中所述,在一般情况下无法更改属性。这仅仅是因为属性实际上是程序集元数据的一部分,并且执行所需的操作意味着更改该程序集元数据。

尽管有两种方法可能会起作用,

  1. 您确实更改了程序集元数据。在这里,您处于面向方面的编程领域。您可以尝试创建一个方面,例如基于PostSharp的文档,该文档在编译时将MyAttributeToControlWhichOneToUse属性展开为所需的属性。此解决方案与属性的读取方式无关,但是需要更改构建基础结构。
  2. 您可以更改属性的加载方式。 MEF就是一个示例,它针对其基于约定的编程模型进行了工作,该模型通过更改检索属性的方式来有效地模拟常规类上的属性。只有在读取属性的lib中预见到了,这才起作用(老实说,我从未见过MEF以外的人可以这样做)。