如何使用Autofac注入AutoMapper?

将AutoMapper注入其他图层的正确方法是什么?

我读了这篇博文,但是这段代码导致了以下exception

AutoMapper.dll中出现“AutoMapper.AutoMapperMappingException”类型的例外,但未在用户代码中处理

当尝试在服务层中映射时。

List list2 = _mapper.Map<List>(list); 

我的AutoFac配置如下:

 public static class DependencyRegistration { public static void Config() { var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterType().As(); builder.RegisterType().As().WithParameter("mappers", MapperRegistry.Mappers).SingleInstance(); builder.Register((ctx, t) => ctx.Resolve()).As().As(); builder.RegisterType().As(); //... var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } } 

您似乎需要使用容器中注册的IConfiguration对象来创建这样的映射:

 var configuration = container.Resolve(); configuration.CreateMap(); 

我认为你应该在申请开始时这样做。

以下是在Config方法中配置内容的更好方法(IMO):

 public static void Config() { var configuration_store = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers); var mapping_engine = new MappingEngine(configuration_store); configuration_store.CreateMap(); var builder = new ContainerBuilder(); builder.RegisterInstance(mapping_engine).As(); //... var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } 

我假设在最后一个示例中,您的类只需要访问IMappingEngine (而不是IConfiguration ),因为您应该已经在Config方法中设置了所有映射(或者在应用程序启动时设置了一些其他配置方法)。