AutoMapper在装配加载时添加Profile

时间:2012-11-06 09:18:40

标签: c# automapper

我想将业务层中的所有映射注册到数据层,将数据层注册到业务层类就像我的业务层程序集加载一样。目前我正在使用静态类为我执行此任务:

public static class AutoMapperBootstrapper
{
    public static void InitMappings()
    {
        Mapper.Initialize(a => a.AddProfile<MyProfile>());
    }
}

但每次我使用Mapper.Map和配置文件中添加的映射进行调用时,仍然会说缺少类型映射信息。

我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

应用程序启动时,Mapper.AddProfile似乎没有调用。 试试这个,

Global.asax.cs [Application_Start],

protected void Application_Start(object sender, EventArgs e)
{
    Mapper.AddProfile<MyProfile>();
}

MyProfile如下所示,

public class MyProfile : Profile
{
    public override string ProfileName
    {
        get { return "Name"; }
    }

    protected override void Configure()
    {
        //// BL to DL
        Mapper.CreateMap<BLCLASS, DLCLASS>();

        ////  and DL to BL
        Mapper.CreateMap<DLCLASS, BLCLASS>();
    }
}

答案 1 :(得分:0)

我不知道你是否已经得到了答案。您走在正确的轨道上,但不要使用Mapper.Initialize。如果使用initialize,则清除所有现有映射,然后在初始化调用中添加这些映射。而只需在静态方法中调用AddProfile。或者更好的是,只需在BL或DL类的构造函数中添加配置文件。

public static class AutoMapperBootstrapper
{
    public static void AddMappings()
    {
        Mapper.AddProfile<MyProfile>();
    }
}

简而言之,正在发生的事情是您在Global.asax或您添加它们的任何位置添加Web层所需的映射。然后在第一次加载BL或DL时,您调用initialize来清除任何现有的映射。因此,下次使用已添加的映射时,会收到消息,表明它不存在,因为它已被初始化调用清除。