ASP.NET

  1. services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);
  2. public class EmployeesController {
  3. private readonly IMapper _mapper;
  4. public EmployeesController(IMapper mapper) => _mapper = mapper;
  5. // use _mapper.Map or _mapper.ProjectTo
  6. }

Autofac

  1. public class AutoMapperModule : Autofac.Module
  2. {
  3. private readonly IEnumerable<Assembly> assembliesToScan;
  4. public AutoMapperModule(IEnumerable<Assembly> assembliesToScan) => this.assembliesToScan = assembliesToScan;
  5. public AutoMapperModule(params Assembly[] assembliesToScan) : this((IEnumerable<Assembly>)assembliesToScan) { }
  6. protected override void Load(ContainerBuilder builder)
  7. {
  8. base.Load(builder);
  9. var assembliesToScan = this.assembliesToScan as Assembly[] ?? this.assembliesToScan.ToArray();
  10. var allTypes = assembliesToScan
  11. .Where(a => !a.IsDynamic && a.GetName().Name != nameof(AutoMapper))
  12. .Distinct() // avoid AutoMapper.DuplicateTypeMapConfigurationException
  13. .SelectMany(a => a.DefinedTypes)
  14. .ToArray();
  15. var openTypes = new[] {
  16. typeof(IValueResolver<,,>),
  17. typeof(IMemberValueResolver<,,,>),
  18. typeof(ITypeConverter<,>),
  19. typeof(IValueConverter<,>),
  20. typeof(IMappingAction<,>)
  21. };
  22. foreach (var type in openTypes.SelectMany(openType =>
  23. allTypes.Where(t => t.IsClass && !t.IsAbstract && ImplementsGenericInterface(t.AsType(), openType))))
  24. {
  25. builder.RegisterType(type.AsType()).InstancePerDependency();
  26. }
  27. builder.Register<IConfigurationProvider>(ctx => new MapperConfiguration(cfg => cfg.AddMaps(assembliesToScan))).SingleInstance();;
  28. builder.Register<IMapper>(ctx => new Mapper(ctx.Resolve<IConfigurationProvider>(), ctx.Resolve)).InstancePerDependency();
  29. }
  30. private static bool ImplementsGenericInterface(Type type, Type interfaceType)
  31. => IsGenericType(type, interfaceType) || type.GetTypeInfo().ImplementedInterfaces.Any(@interface => IsGenericType(@interface, interfaceType));
  32. private static bool IsGenericType(Type type, Type genericType)
  33. => type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == genericType;
  34. }

Castle Windsor

  1. public class AutoMapperInstaller : IWindsorInstaller
  2. {
  3. public void Install(IWindsorContainer container, IConfigurationStore store)
  4. {
  5. // Register all mapper profiles
  6. container.Register(
  7. Classes.FromAssemblyInThisApplication(GetType().Assembly)
  8. .BasedOn<Profile>().WithServiceBase());
  9. // Register IConfigurationProvider with all registered profiles
  10. container.Register(Component.For<IConfigurationProvider>().UsingFactoryMethod(kernel =>
  11. {
  12. return new MapperConfiguration(configuration =>
  13. {
  14. kernel.ResolveAll<Profile>().ToList().ForEach(configuration.AddProfile);
  15. });
  16. }).LifestyleSingleton());
  17. // Register IMapper with registered IConfigurationProvider
  18. container.Register(
  19. Component.For<IMapper>().UsingFactoryMethod(kernel =>
  20. new Mapper(kernel.Resolve<IConfigurationProvider>(), kernel.Resolve)));
  21. }
  22. }