首页 > 解决方案 > 实现其他属性的属性

问题描述

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

我想控制要在项目中使用的库属性。某种 DI 或模块控制。有没有不使用反射的简单方法来实现它?

将这两种属性合二为一的东西:

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

[AdaptMember(name)]

进入

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

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

标签: c#oopattributes

解决方案


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

不过,这有两种可能的工作方式:

  1. 您确实更改了程序集元数据。在这里,您处于面向方面的编程领域。您可以尝试创建一个方面,例如基于 PostSharp,MyAttributeToControlWhichOneToUse在编译时将您的属性展开为所需的属性。此解决方案与读取属性的方式无关,但需要更改构建基础架构。
  2. 您更改加载属性的方式。MEF 是一个例子,它基于约定的编程模型通过改变检索属性的方式有效地模拟传统类的属性。这只有在读取属性的库中预见到时才有效(老实说,除了 MEF 之外,我从未见过其他人这样做)。

推荐阅读