C# 实现其他属性的属性

C# 实现其他属性的属性,c#,oop,attributes,C#,Oop,Attributes,我想要外观或代理库的已实现属性。 例如,属性映射属性 我想控制在项目中使用哪些库属性。 某种DI或模块控制。 有没有一种不使用反射的简单方法来实现它 将这两种类型的属性转换为一种: [MapsFromAndToProperty(typeof(fooClass), nameof(fooClass.PropertyName))] 及 进入 谢谢你的关注。 如有任何帮助,我们将不胜感激。如评论中所述,在一般情况下,不可能更改属性。这仅仅是因为属性实际上是程序集元数据的一部分,执行所需操作意味着更改该

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

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

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

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

进入

谢谢你的关注。
如有任何帮助,我们将不胜感激。

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

但是,有两种方法可以潜在地发挥作用:

  • 您确实更改了程序集元数据。在这里,您是在面向方面编程领域。您可以尝试创建一个方面,例如基于PostSharp,在编译时将
    MyAttributeToControlWhichOneToUse
    属性展开为所需的属性。此解决方案独立于属性的读取方式,但需要更改构建基础结构
  • 您可以更改属性的加载方式。MEF就是这样一个例子,它基于约定的编程模型通过改变检索属性的方式,有效地模拟了传统类上的属性。如果在读取属性的lib中预见到,这只会起作用(老实说,我从未见过任何人比MEF更愿意这样做)

  • 我认为你想做的事行不通。问题是,库将查找其属性,并根据其自身的逻辑对其进行解释。如果定义了另一个属性,则库不知道如何查找它或它的含义。如果它是您的库,则可以修改它以查找新属性。但如果它是第三方库,那么除非你做一些我甚至不想想象的非常非常复杂的事情,否则我认为你无法完成你所描述的。也许你可以创建一个新类来保存“fooClass”的实例。您完全可以自由选择如何允许/拒绝访问“fooClass”。然后,从那时起,您就可以使用这个新类了。
    [AdaptMember(name)]
    
    [MyAttributeToControlWhichOneToUse(typeof(fooClass), nameof(fooClass.PropertyName))]