【问题标题】:Generate abstract class on the fly in .Net在 .Net 中动态生成抽象类
【发布时间】:2012-07-22 22:19:55
【问题描述】:

我有一个导出过程,它将带注释的类作为输出文件定义(很像 Linq-To-Entities)

一个类看起来像这样:

<ExportDefinition(Name:="Some Export Format")>
Public Class SomeExportFormat
    Overridable Property Id As Integer

    <DisplayName("Customer Name")>
    Overridable Property CustomerName As String


End Class

属性是可覆盖的,因为我有时必须代理。

我需要添加允许指定临时格式的功能(WCF 调用请求导出具有一次性格式的特定数据)。

为避免重写大量导出代码,我想采用我通过 WCF 传递的定义并定义一个新类。

我最好使用System.CodeDom.Compiler 还是有更优雅的解决方案?

【问题讨论】:

    标签: .net compilation


    【解决方案1】:

    就个人而言,我会关注TypeBuilder,但我有点……不平衡,并准备跳入ILGenerator。但是,是的,您可以通过这种方式创建新的子类。但请注意 - WCF 和 EF 不会自动接受您的类型。大多数具有继承意识的库(包括 WCF 和 EF)会讨厌动态子类,因为它们没有预料到它们并将它们视为完全意外的数据。

    【讨论】:

    • 感谢 Marc,关于唯一会触及它的代码应该是我自己的(我使用反射来提取各种属性和属性,然后使用该信息来格式化行)。我会演一场,看看进展如何
    • 好的,在阅读了一些文章之后,似乎创建一个类和属性会非常冗长(我必须知道事情是如何工作的,我一直想了解更多关于 IL 的信息,所以这可能是一个好机会)。你能解释一下为什么你会走那条路而不是CodeDom.Compiler吗?
    • @Basic 也许我有偏见,但这就是我的“点击”。如果 codedom 为您点击,那就太好了。其他因素:我喜欢基于 IlGenerator 的 DynamicMethod,并且我在一系列平台上工作——reflection.emit 比 codedom 有更好的整体支持
    • 我完全理解 - 我做的一些有点晦涩难懂的事情对我很有效。我必须做更多的阅读才能深入了解它,但谢谢你,我认为你已经给出了一个很好的答案。我会在几天后将其打开,以防有更多绝妙的想法出现。
    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2013-06-10
    相关资源
    最近更新 更多