如何使用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
方法中设置了所有映射(或者在应用程序启动时设置了一些其他配置方法)。