internal static void ConfigAction( this Container c, IMapperConfigurationExpression cfg, AutoMapperSimpleInjectorConfiguration serviceCfg) { serviceCfg.MapperConfigurationExpressionAction.Invoke( c, cfg); cfg.ConstructServicesUsing(c.GetInstance); cfg.AddMaps(serviceCfg.AssembliesToScan); }
/// <summary> /// Add AutoMapper to SimpleInjector with configuration action. /// </summary> /// <param name="container"><see cref="Container"/>.</param> /// <param name="configuration"><see cref="AutoMapperSimpleInjectorConfiguration"/> instance.</param> /// <returns><see cref="Container"/>.</returns> public static Container AddAutoMapper( this Container container, Action <AutoMapperSimpleInjectorConfiguration>?configuration) { if (container is null) { throw new ArgumentNullException(nameof(container)); } var serviceConfig = new AutoMapperSimpleInjectorConfiguration(); configuration?.Invoke(serviceConfig); var uniqueAssemblies = serviceConfig.AssembliesToScan.Distinct().ToArray(); container.RegisterIncludingGenericTypeDefinitions(uniqueAssemblies, typeof(IValueResolver <, ,>)); container.RegisterIncludingGenericTypeDefinitions(uniqueAssemblies, typeof(IMemberValueResolver <, , ,>)); container.RegisterIncludingGenericTypeDefinitions(uniqueAssemblies, typeof(ITypeConverter <,>)); container.RegisterIncludingGenericTypeDefinitions(uniqueAssemblies, typeof(IValueConverter <,>)); container.RegisterIncludingGenericTypeDefinitions(uniqueAssemblies, typeof(IMappingAction <,>)); container.Register <IConfigurationProvider>( () => new MapperConfiguration( cfg => container.ConfigAction(cfg, serviceConfig)), Lifestyle.Singleton); var customMapperInstance = serviceConfig.MapperInstanceCreator(); if (customMapperInstance != null) { container.Register( () => customMapperInstance, serviceConfig.Lifestyle); } else if (serviceConfig.MapperImplementationType == typeof(Mapper)) { container.Register( () => container.GetInstance <IConfigurationProvider>().CreateMapper(), serviceConfig.Lifestyle); } else { container.Register(typeof(IMapper), serviceConfig.MapperImplementationType, serviceConfig.Lifestyle); } return(container); }