Automapper 5.0全局配置

时间:2016-05-20 14:04:43

标签: c# model-view-controller automapper

我在AutoMapperConfig.cs文件夹的App_Start中使用了以下代码。一世 在Global.asax中将其初始化为AutoMapperConfiguration.Configure()

但是我无法使用Mapper.Map<Hospital, MongoHospital> 控制器。它抛出的异常是没有定义映射。它 曾在以前版本的Automapper中工作过 Mapper.CreateMap<>方法。我很困惑如何使用 MapperConfiguration实例。

public static class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(
            cfg =>
                {
                    cfg.AddProfile<HospitalProfile>();
                }
        );
        Mapper.AssertConfigurationIsValid();
    }
}

public class HospitalProfile : Profile
{
    protected override void Configure()
    {
        var config = new MapperConfiguration(
            cfg =>
                {
                    cfg.CreateMap<Hospital, MongoHospital>()
                        .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id.ToString()));
                });
        config.CreateMapper();
    }
}

尝试按以下方式访问此地图

Mapper.Map<IEnumerable<Hospital>, IEnumerable<MongoHospital>>(hospitalsOnDB);

2 个答案:

答案 0 :(得分:3)

在这种情况下,您真的需要使用配置文件吗?如果你不这样做,你可以尝试像这样初始化Mapper:

public static class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(
            config =>
            {
                config.CreateMap<Hospital, MongoHospital>()
                    .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id.ToString()));
            });
    }
}

但是,如果您仍想注册个人资料,可以这样做:

public static class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(
            cfg =>
            {
                cfg.AddProfile<HospitalProfile>();
            }
        );
    }
}

public class HospitalProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<Hospital, MongoHospital>()
                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id.ToString()));
    }
}

希望这会有所帮助。如果您正在使用AutoMapper 5.0,请记住此时此时仍处于测试阶段。

答案 1 :(得分:1)

您可以在AutoMapper 5.2中使用它。

您的个人资料类如下

public class MapperProfile: Profile
{
    public MapperProfile()
    {
        CreateMap<Hospital, MongoHospital>().ReverseMap();
    }

}

然后在你的Global.asax

     protected void Application_Start()
     {
       //Rest of the code 
       Mapper.Initialize(c => c.AddProfiles(new string[] { "DLL NAME OF YOUR PROFILE CLASS" }));
     }

现在需要创建实例

AutoMapper.Mapper.Instance.Map<MongoHospital, Hospital>(source, new Hospital());

希望这有帮助。