2个月前我问过这个问题!问题仍然存在。
我不打算在这里复制/粘贴相同的问题,因为我发现错误不是针对特定的 Entity-DTO 映射,而是针对控制器中首先出现的任何 Entity-DTO。
我的意思是,如果程序流到达 Country-CountryDto,则错误显示:
Missing type map configuration or unsupported mapping.
Mapping types:
Country -> CountryDTO
MyApp.Domain.BoundedContext.Country -> MyApp.Application.BoundedContext.CountryDTO
Destination path:
List`1[0]
Source value:
MyApp.Domain.BoundedContext.Country
或者,如果有第一手的帐户检查,错误会显示:
Missing type map configuration or unsupported mapping.
Mapping types:
Account -> AccountDTO
MyApp.Domain.BoundedContext.Account -> MyApp.Application.BoundedContext.AccountDTO
Destination path:
AccountDTO
Source value:
MyApp.Domain.BoundedContext.Account
我还发现,每当我重建 N 层解决方案的表示层(在本例中是 MVC 3 项目)时,错误就消失了。然后,在随机的时间,它再次发生。
如果这个问题只发生在开发环境中,那没什么大不了的,但是发布后问题仍然存在,所以我遇到了大麻烦。
我已经通过 Google、Stackoverflow、Automapper 论坛/组进行了搜索,但没有成功。
我还使用 Mapper.AssertConfigurationIsValid() 测试了映射,一切都很好。
我的项目是一个带有 Automapper 2.2 和 Unity IoC 的 MVC 3 项目。
再次,我将不胜感激任何想法、建议或解决方案。
编辑:好的,现在我有一个线索。我有一个名为 ManagementProfile 的配置文件,我的所有映射都在其中完成。在AutomapperTypeAdapterFactory()
我有这样的代码:
public AutomapperTypeAdapterFactory()
{
//Scan all assemblies to find an Auto Mapper Profile
var profiles = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.BaseType == typeof(Profile));
Mapper.Initialize(cfg =>
{
foreach (var item in profiles)
{
if (item.FullName != "AutoMapper.SelfProfiler`2")
cfg.AddProfile(Activator.CreateInstance(item) as Profile);
}
});
}
我发现,通常,该profiles
变量包含 ManagementProfile但有时它无法获取信息并说"Enumeration yielded no results"
我得到了这个问题中提到的异常。
通过进一步调查,我发现当一切正常时AppDomain.CurrentDomain.GetAssemblies()
加载 85 个程序集,另一方面,当我收到异常时,它只加载了 41 个程序集,很明显,其中一个缺少的程序集是保存 DTO 映射的程序集。