类似于这个问题:放置AutoMapper.CreateMaps的位置?
建议将非静态AutoMapper初始化放在哪里?
var map = new MapperConfiguration( cfg => ... ).CreateMapper();
建议在哪里存储映射变量,以便从控制器访问它?
提前谢谢。
一个很好的方法是使用依赖项注入,并在需要访问它的组件上注入映射器。这种新的AutoMapper方法也非常适合单元测试,因为你只需要模拟接口。
在我们的案例中,我们使用AutoFaq作为IoC容器,并将AutoMapper设置为这样:
builder.RegisterInstance(AutoMapperConfig.GetConfiguredMapper()).As<IMapper>();
GetConfiguredMapper通过调用MapperConfiguration的CreateMapper方法返回IMapper。
然后,您可以让AutoFaq完成所有的连线和构造函数注入。
如果您真的想保留旧的方法,您可以始终将IMapper封装在应用程序中的静态类中。
我当然更喜欢新版本,因为它使模拟和单元测试代码变得非常简单。