我编写了一些使用dynamic
的代码,该代码在从单元测试程序集 A
var obj = (IDomainObjectMapConfigurer)Activator.CreateInstance(domainObjectType);
dynamic mapper = obj.CreateMapping();
var map = mapper.Map; // the line that fails in the assembly _B_
当我从单元测试程序集 B 运行它时,它失败并显示Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : 'XYZ.DomainObjectMapper' does not contain a definition for 'Map'
一些背景:IDomainObjectMapConfigurer.CreateMapping()
返回一个抽象类DomainObjectMapper
,它的唯一具体实现如下:
public class DomainObjectMapper<TDomainObject> : DomainObjectMapper
{
public Action<IDomainObjectMap<TDomainObject>> Map { get; private set; }
public DomainObjectMapper(Action<IDomainObjectMap<TDomainObject>> map)
{
SetMap(map);
}
public void SetMap(Action<IDomainObjectMap<TDomainObject>> map)
{
Map = map;
}
}
我一直在看这个问题好几个小时,我无法弄清楚为什么从汇编 A 调用它而不是从 B 调用它。
需要考虑的一个异常现象是,在某个时间点,我确实已将程序集 B .NET 3.5兼容,但后来又将其切换为4.0。
修改:
我还应该提一下,我可以在mapper.Map
上停止调试器并观察Map
属性是否存在。 mapper.GetType().GetProperties()[0].Name
也是“地图”
虽然没关系,但一切都在编译为x64
(而不是AnyCpu
)