ASP.NET
services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);public class EmployeesController { private readonly IMapper _mapper; public EmployeesController(IMapper mapper) => _mapper = mapper; // use _mapper.Map or _mapper.ProjectTo}
Autofac
public class AutoMapperModule : Autofac.Module{ private readonly IEnumerable<Assembly> assembliesToScan; public AutoMapperModule(IEnumerable<Assembly> assembliesToScan) => this.assembliesToScan = assembliesToScan; public AutoMapperModule(params Assembly[] assembliesToScan) : this((IEnumerable<Assembly>)assembliesToScan) { } protected override void Load(ContainerBuilder builder) { base.Load(builder); var assembliesToScan = this.assembliesToScan as Assembly[] ?? this.assembliesToScan.ToArray(); var allTypes = assembliesToScan .Where(a => !a.IsDynamic && a.GetName().Name != nameof(AutoMapper)) .Distinct() // avoid AutoMapper.DuplicateTypeMapConfigurationException .SelectMany(a => a.DefinedTypes) .ToArray(); var openTypes = new[] { typeof(IValueResolver<,,>), typeof(IMemberValueResolver<,,,>), typeof(ITypeConverter<,>), typeof(IValueConverter<,>), typeof(IMappingAction<,>) }; foreach (var type in openTypes.SelectMany(openType => allTypes.Where(t => t.IsClass && !t.IsAbstract && ImplementsGenericInterface(t.AsType(), openType)))) { builder.RegisterType(type.AsType()).InstancePerDependency(); } builder.Register<IConfigurationProvider>(ctx => new MapperConfiguration(cfg => cfg.AddMaps(assembliesToScan))).SingleInstance();; builder.Register<IMapper>(ctx => new Mapper(ctx.Resolve<IConfigurationProvider>(), ctx.Resolve)).InstancePerDependency(); } private static bool ImplementsGenericInterface(Type type, Type interfaceType) => IsGenericType(type, interfaceType) || type.GetTypeInfo().ImplementedInterfaces.Any(@interface => IsGenericType(@interface, interfaceType)); private static bool IsGenericType(Type type, Type genericType) => type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == genericType;}
Castle Windsor
public class AutoMapperInstaller : IWindsorInstaller{ public void Install(IWindsorContainer container, IConfigurationStore store) { // Register all mapper profiles container.Register( Classes.FromAssemblyInThisApplication(GetType().Assembly) .BasedOn<Profile>().WithServiceBase()); // Register IConfigurationProvider with all registered profiles container.Register(Component.For<IConfigurationProvider>().UsingFactoryMethod(kernel => { return new MapperConfiguration(configuration => { kernel.ResolveAll<Profile>().ToList().ForEach(configuration.AddProfile); }); }).LifestyleSingleton()); // Register IMapper with registered IConfigurationProvider container.Register( Component.For<IMapper>().UsingFactoryMethod(kernel => new Mapper(kernel.Resolve<IConfigurationProvider>(), kernel.Resolve))); }}