我正在将我的AutoMapper从使用一个大的AutoMapperConfiguration类转换为使用实际的配置文件。全局现在看起来是这样的(现在暂时宽恕Open/Close违规)
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
关键要素是让我成功并克服先前一直阻碍我使用配置文件的障碍的是我的 Ninject 绑定。我以前从未能使绑定正常工作。之前我的绑定如下:
Bind<IMappingEngine>().ToConstant(Mapper.Engine).InSingletonScope();
我现在已经迁移到这个绑定:
Bind<IMappingEngine>().ToMethod(context => Mapper.Engine);
现在这个应用程序可以正常运行,我有用户档案,一切顺利。
问题出在我的单元测试上,我使用 NUnit,在构造函数依赖项中进行设置。
private readonly IMappingEngine _mappingEngine = Mapper.Engine;
然后在我的 [Setup] 方法中,我会构建我的MVC控制器并调用AutoMapperConfiguration类。
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
AutoMapperConfiguration.Configure();
}
我现在已经修改了它。
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
}
很遗憾,这似乎并不起作用。映射似乎没有被捡起来,因为当我碰到使用映射的方法时,AutoMapper会抛出一个异常,指出映射不存在。有什么建议可以更改测试中的映射器定义/注入以解决这个问题吗?我猜测IMappingEngine字段的定义是我的问题,但不确定我有哪些选项。
谢谢
MappingEngine
替换所有对Mapper
(Mapper.Initialize
,Mapper.Engine
等)的调用/引用吗? - Akim