加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC 3:AutoMapper和项目/解决方案结构

发布时间:2020-12-16 09:49:07 所属栏目:asp.Net 来源:网络整理
导读:我刚开始在我的MVC 3项目中使用AutoMapper,我想知道人们在使用它时如何构建他们的项目.我创建了一个MapManager,它只有一个SetupMaps方法,我在global.asax中调用它来创建初始地图配置.我还需要为我的一个映射使用ValueResolver.对我来说,在几个不同的地方需要
我刚开始在我的MVC 3项目中使用AutoMapper,我想知道人们在使用它时如何构建他们的项目.我创建了一个MapManager,它只有一个SetupMaps方法,我在global.asax中调用它来创建初始地图配置.我还需要为我的一个映射使用ValueResolver.对我来说,在几个不同的地方需要这个特殊的ValueResolver,它只是从Article.GenerateSlug返回一个值.

所以我的问题是:

>如何管理所有地图的初始创建(Mapper.CreateMap)?
>您在哪里将ValueResolvers的类放在项目中?您是在Model文件夹下创建子文件夹还是其他东西?

谢谢你的帮助.

解决方法

我不会将问题2作为其真正的个人偏好,但对于1我通常使用一个或多个AutoMapper.Profile来保存我的所有Mapper.CreateMap以用于特定目的(domaintoviewmodel等).

public class ViewModelToDomainAutomapperProfile : Profile
{
    public override string ProfileName
    {
        get
        {
            return "ViewModelToDomain";
        }
    }

    protected override void Configure()
    {
        CreateMap<TripRegistrationViewModel,TripRegistration>()
            .ForMember(x=>x.PingAttempts,y => y.Ignore())
            .ForMember(x=>x.PingResponses,y => y.Ignore());
    }
}

然后我创建一个配置Mapper的引导程序(IInitializer),添加我的所有配置文件.

public class AutoMapperInitializer : IInitializer
{
    public void Execute()
    {
        Mapper.Initialize(x =>
                            {
                                x.AddProfile<DomainToViewModelAutomapperProfile>();
                                x.AddProfile<ViewModelToDomainAutomapperProfile>();
                            });
    }
}

然后在我的global.asax中获取IInitializer的所有实例并通过它们循环运行Execute().

foreach (var initializer in ObjectFactory.GetAllInstances<IInitializer>())
            {
                initializer.Execute();
            }

这是我的总体战略.

根据要求,这是最后一步的反思实施.

var iInitializer = typeof(IInitializer);

List<IInitializer> initializers = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => iInitializer.IsAssignableFrom(p) && p.IsClass)
    .Select(x => (IInitializer) Activator.CreateInstance(x)).ToList();

foreach (var initializer in initializers)
{
    initializer.Execute();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读