c# - 实现其他属性的属性
问题描述
我想外观或代理库的已实现属性。例如属性映射属性。
我想控制要在项目中使用的库属性。某种 DI 或模块控制。有没有不使用反射的简单方法来实现它?
将这两种属性合二为一的东西:
[MapsFromAndToProperty(typeof(fooClass), nameof(fooClass.PropertyName))]
和
[AdaptMember(name)]
进入
[MyAttributeToControlWhichOneToUse(typeof(fooClass), nameof(fooClass.PropertyName))]
并感谢您的关注。任何帮助,将不胜感激。
解决方案
如评论中所述,在一般情况下无法更改属性。这仅仅是因为属性实际上是程序集元数据的一部分,并且执行您想要的操作意味着更改该程序集元数据。
不过,这有两种可能的工作方式:
- 您确实更改了程序集元数据。在这里,您处于面向方面的编程领域。您可以尝试创建一个方面,例如基于 PostSharp,
MyAttributeToControlWhichOneToUse
在编译时将您的属性展开为所需的属性。此解决方案与读取属性的方式无关,但需要更改构建基础架构。 - 您更改加载属性的方式。MEF 是一个例子,它基于约定的编程模型通过改变检索属性的方式有效地模拟传统类的属性。这只有在读取属性的库中预见到时才有效(老实说,除了 MEF 之外,我从未见过其他人这样做)。
推荐阅读
- react-native - 如果我在函数中间更新状态,函数其余部分的执行顺序是什么?
- batch-file - 如何在没有空格的情况下批量计算句子中的每个字母
- powershell - 从服务器获取奇怪的错误 - PowerShell
- flutter - Flutter Navigator.of(context).pop() in showDialog, close full app in ios
- python - 无法将符号张量 (sequential/lstm/strided_slice:0) 转换为 numpy 数组。在 MacBook Pro M1 上使用 TensorFlow 时出现问题
- python - Python 中的 switch-case 语句
- html - HTML 和 CSS 图像不在盒子内
- azure-devops - 使用打包生成和发布配置文件的 Azure DevOps 发布管道
- python - 如何在 Python 中将用户输入格式化为变量
- odoo - Odoo - 不按 _rec_name 过滤 Many2one