是否可以使用 Reflection.Emit 在现有程序集中创建类型,或者您是否需要定义一个新的动态程序集才能包含动态类型?
基本上,我打算读入一个 XML 定义文件,该文件定义了一个类,然后多次实例化该类并使用其他几个 XML 文件中的数据进行填充。冲洗并重复几个文件夹(每个文件夹都有不同的定义文件)。
我还打算使用这些数据来动态构建我的应用程序的界面,以及在将数据重新保存到 XML 文件时定义数据的格式。
最佳答案
使用 Reflection.Emit 时,您必须始终创建一个新程序集。
但是,一种可能的选择是采用您现有的程序集,并将契约定义为接口(interface)。您可以在运行时使用 Reflection.Emit 创建新程序集,并让它定义实现您的接口(interface)的类型。您的程序集可以使用 factory pattern实例化属性、动态生成的类型,并返回您的(在编译时已知的)接口(interface)的实现。
关于C# 反射 : Emitting classes to existing assemblies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114501/