我有以下 ClassMap:
internal sealed class MyOuterMap : ClassMap<MyOuterClass>
{
public MyOuterMap()
{
References<MyInnerMap>(x => x.MyInnerClassProperty);
}
}
internal sealed class MyInnerMap : ClassMap<MyInnerClass>
{
public MyInnerMap(string p1, int p2)
{
}
}
客户端代码是:
using var csvReader = new CsvReader(streamReader, config);
csvReader.Context.RegisterClassMap(new MyInnerMap("hello", 42));
csv.Context.RegisterClassMap<MatchMap>();
收到错误消息:
System.MissingMethodException:“构造函数”InnerMap()”不是 找到了。”
我确实理解该消息,并且也理解 CsvHelper 尝试实例化 MyInnerMap 的新实例。问题是为什么 CsvHelper 不使用我注册的实例?
当您使用特定参数创建
MyInnerMap
的实例并将其注册到 CsvHelper
时:
csvReader.Context.RegisterClassMap(new MyInnerMap("hello", 42));
CsvHelper
不使用此特定实例来处理其映射操作。相反,它会在需要时在内部创建自己的实例,通常使用无参数构造函数。 CsvHelper
不直接利用您手动实例化的实例来进行映射操作。