通过Asp.Net Core Dependency注入添加AutoMapper并注入配置文件

时间:2017-08-11 10:07:53

标签: c# dependency-injection asp.net-core automapper

我使用ASP.net Core和AutoMapper。为了让DI运行,我使用AutoMapper.Extensions.Microsoft.DependencyInjection Nuget-Package并让AutoMapper通过

注册配置文件
    private static void InitializeAutoMapper(IServiceCollection services)
    {
        services.AddAutoMapper();
    }

这样可以正常工作,但是对于某些配置文件,我还想为它们注入一些依赖项,例如:

public class IndividualDtoProfile : Profile
{
    private readonly IIndividualFactory _individualFactory;
    private readonly IMapper _mapper;

    public IndividualDtoProfile(IIndividualFactory individualFactory, IMapper mapper)
    {
        _individualFactory = individualFactory;
        _mapper = mapper;
    }

    public IndividualDtoProfile()
    {
        CreateMap<Individual, IndividualDto>();

        CreateMap<IndividualDto, Individual>()
            .ConstructUsing(
                dto =>
                {
                    var gender = _mapper.Map<IndividualGender>(dto.Gender);
                    return _individualFactory.CreateIndividual(dto.FirstName, dto.LastName, gender, dto.BirthDate);
                });
    }
}

我找到的唯一相关讨论是:https://groups.google.com/forum/#!topic/automapper-users/5XK7pqGu_Tg

似乎建议不要使用现有可能性的优点,而是手动映射配置文件。我唯一看到的另一种可能性就是提供一个静态的ServiceProvider-Singleton,它看起来也不太吸引人。

是否已经有可能将ASP.Net Core与AutoMapper一起使用并让依赖项注入Profiles?

编辑:由于评论,我可能也有一些根本错误:我正在学习领域驱动设计,我有一个应用层。我想将从Web服务中使用的DTO映射回域实体,我想,在那里使用工厂也是有意义的,否则我会绕过逻辑中的逻辑。工厂。

1 个答案:

答案 0 :(得分:1)

根据设计,不支持开箱即用。如果您需要,您必须自己使用DI容器。这已经多次讨论过了。例如,heredocs