【问题标题】:Creating Attribute Aliases?创建属性别名?
【发布时间】:2015-03-26 11:39:09
【问题描述】:

我正在尝试在我正在使用的框架和我的应用程序代码之间创建一个通用层,但由于框架需要用属性装饰我的类而被阻止。

有没有办法以某种方式将属性映射到其他属性?

示例: 类 A 用属性 B 装饰 在运行时,将属性 B 映射到属性 A 在应用程序的整个生命周期中,A 类都被属性 A 修饰。

【问题讨论】:

  • 如果不发布所有相关代码,很难准确地确定您在做什么或尝试做什么......
  • 课程是partial吗? msdn.microsoft.com/en-us/library/…
  • 也许是ICustomTypeDescriptor,但我很确定这是经典的XY problem。它是什么框架?可能是提供了一些您不知道的其他选项。
  • @PaulAbbott 这会有什么帮助?
  • 您无法映射属性,但可以添加它们。所以 A 类可以被属性 A 修饰(它也只有属性 B)。

标签: c# custom-attributes


【解决方案1】:

您正在尝试做的事情听起来像是糟糕的设计。属性不是运行时类型,它们实际上只是类型元数据。即使某些属性允许您在运行时更改其参数,但这不会更改应用的属性。

您会在互联网上找到建议使用Reflection.Emit 的解决方案。请注意,这是一个滑坡,会导致代码高度不可维护。

我个人的建议是创建自己的Class B,用Attribute AAttribute B 装饰,然后使用内部逻辑来桥接您想要桥接的任何内容。

【讨论】:

  • 是的,我坚持我的回答;) 在 DI 框架和您的实际代码库之间添加一个中间层将导致架构难以阅读(和维护)。在这种情况下,您可能需要考虑替代 DI 框架,或者查看您选择的 DI 框架是否允许您创建自定义解析器。
  • stackoverflow.com/questions/3493640/… 在不破坏架构的情况下找到了我想做的事情:)
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
相关资源
最近更新 更多