A
我想将一个类和一个接口绑定在一起B
,并创建一个实现该接口C
的类型。还:C
B
typeC
有一个构造函数,它接受 type 的对象A
作为构造函数,我们称之为i
A
给定从到的所有属性的映射B
(假设映射中的所有属性具有相同的类型),则它使用来自 的属性值i
。
例如:
class A { public string Name { get; set; } }
interface B { string Name { get; set; } }
class C : B {
private readonly A _i;
public C(A i) {
_i = i;
}
public string Name
{
get => _i.Name;
set => _i.Name = value;
}
}
这就是我所做的(我的意思是“常见” B,我的意思是“来源” A):
/// <summary>
/// Creates a new type dynamically
/// </summary>
public class CustomTypeGenerator<TSource, TCommon>
{
private readonly TypeBuilder _tb;
private readonly FieldBuilder _entityFieldBldr;
private readonly Type _srcType;
/// <summary>
/// Initialize custom type builder
/// </summary>
public CustomTypeGenerator(IEnumerable<(string CommonPrpName, Type Type, string SourcePrpName)> members)
{
var cmType = typeof(TCommon);
_srcType = typeof(TSource);
if (!cmType.IsInterface)
{
throw new Exception("Type has to be an interface");
}
const string assemblyName = "DynamicAseembly123";
const string typeSignature = "DynamicType123";
var assemblyBuilder =
AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(assemblyName), AssemblyBuilderAccess.Run);
var moduleBuilder = assemblyBuilder.DefineDynamicModule("Module123");
foreach (var (commonPrpName, type, sourcePrpName) in members)
{
EmitProperty(commonPrpName, type, sourcePrpName);
}
EmittedType = _tb.CreateType();
}
}
我得到的异常:
程序集“DynamicAseeembly123,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”的类型“DynamicType123”中的方法“get_Name”没有实现。
感谢您的任何帮助或提示。
素胚勾勒不出你
相关分类