项目
版本

AutoMapper 依赖注入

示例

ASP.NET Core

有一个 NuGet 包 用于与 此处 描述的默认注入机制一起使用,并在 此项目 中使用。

您可以使用 配置文件 定义配置。然后,您需要在启动时通过调用 IServiceCollection 扩展方法 AddAutoMapper 来告知 AutoMapper 配置文件定义在哪些程序集中:

services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);

或使用标记类型:

services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);

现在,您可以在运行时将 AutoMapper 注入到服务/控制器中:

public class EmployeesController {
    private readonly IMapper _mapper;

    public EmployeesController(IMapper mapper) => _mapper = mapper;

    // 使用 _mapper.Map 或 _mapper.ProjectTo
}

AutoFac

有一个第三方 NuGet 包 供您尝试。

另外,请查看 此博客

其他 DI 引擎

低级 API

AutoMapper 支持使用静态服务定位器构造 自定义值解析器自定义类型转换器值转换器

var configuration = new MapperConfiguration(cfg =>
{
    cfg.ConstructServicesUsing(ObjectFactory.GetInstance);

    cfg.CreateMap<Source, Destination>();
});

或使用动态服务定位器,适用于基于实例的容器(包括子/嵌套容器):

var mapper = new Mapper(configuration, childContainer.GetInstance);

var dest = mapper.Map<Source, Destination>(new Source { Value = 15 });

可查询扩展

提示

从 8.0 开始,您可以使用 IMapper.ProjectTo 。对于旧版本,您需要将配置传递给扩展方法 IQueryable.ProjectTo<T>(IConfigurationProvider)

请注意,ProjectTo 相比于 Map 功能更为有限,因为它只支持底层 LINQ 提供程序允许的操作。这意味着您不能像使用 Map 那样在值解析器和转换器中使用 DI

在本文档中