Auto Mapper04(MVC中的配置)

简介: Auto Mapper04(MVC中的配置)

学习如何在MVC项目中配置AutoMapper。


一:首先在MVC项目中引用AutoMapper的DLL文件,接着创建一个接口,这里面我们需要定义两个方法,接口里面的方法只能定义不能实现,也没有什么修饰符,实现接口的类必须实现里面全部的方法。


定义接口IStartupTask,里面有两个方法。

public interface IStartupTask
{ 
    /// <summary>
    /// 这个方法是将来在实现类中定义配置的。
    /// </summary>
    void Execute(); 
    /// <summary>
    /// 利用泛型,本来使用Mapper.Create(),但是现在只需要直接Create()就可以,因为在泛型的T1,T2直接进行来转换。
    /// </summary>
    /// <typeparam name="T1"></typeparam>
    /// <typeparam name="T2"></typeparam>
    void Create<T1,T2>();
}


新建一个ModelMapper类实现这个接口。这里将来写我们的配置转换的方法。

/// <summary>
/// AutoMapper映射的配置文件,以后只要实现了下面的这个接口就可以用来配置AutoMapper。
/// </summary>
public class ModelMapper:IStartupTask
{
    public void Execute()
    {
        //Create<Book,BookDto>();
        Mapper.CreateMap<BookDto,Book>().ForMember(x=>x.Order,mo=>mo.MapFrom(x=>x.OrderNum));
    }
    /// <summary>
    /// 这个现在才有点思路,就是说利用泛型,看传入的是什么。从而进行转换。
    /// </summary>
    /// <typeparam name="T1"></typeparam>
    /// <typeparam name="T2"></typeparam>
    public virtual void Create<T1,T2>()
    {
        Mapper.CreateMap<T1,T2>();
        Mapper.CreateMap<T2,T1>();
    }
}


在Global.asax文件中新建个方法。这里主要是取到实现上面接口的类,这样我们就不必再前面一样每一次执行前面写配置。<这里的代码自己还是看不懂,只知道是这样。下面截图是老大的解释。>


/// <summary>
/// AutoMapper
/// </summary>
private void ExecuteStartupTasks()
{
    List<IStartupTask> startupTasks = new List<IStartupTask>();       //申明一个List<>泛型集合
    Assembly asm;            //Assembly:是一个程序集
    string codeBase = HttpRuntime.BinDirectory;        //得到Bin的路劲
    UriBuilder uri = new UriBuilder(codeBase);
    string path = Uri.UnescapeDataString(uri.Path); 
    string bin = Path.GetDirectoryName(path);
    string[] assemblies = Directory.GetFiles(bin, "*.dll");         //加载所有的dll文件,
    foreach (String file in assemblies)
    {
        try
        {
            if (File.Exists(file))
            {
                asm = Assembly.LoadFrom(file);
                //寻找实现定义接口的类 <这里才是重头戏>利用linq来实现
                var query = from t in asm.GetTypes()
                            where t.IsClass && t.GetInterface(typeof(IStartupTask).FullName) != null
                            select t;
                // 添加泛型集合到启动任务列表
                foreach (Type type in query)
                {
                    startupTasks.Add((IStartupTask)Activator.CreateInstance(type));
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    foreach (IStartupTask task in startupTasks)
    {
        task.Execute();      //这个方法中是那些配置文件,把那些全部实现初始化
    }
}


这里是老大博客的解释:<自己在有些地方还是不太懂>

679140-20160325202838011-1009600980.png


下来只需在程序的启动文件Application_Start()中添加上面的方法就可以,这样就实现了初始化,我们就可以直接在一个地方集中的进行配置。


/// <summary>
/// 整个项目的启动方法。
/// </summary>
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    //引用下面的AutoMapper方法。
    ExecuteStartupTasks();
}



测试:


新建了两个类来进行测试。


public class Book
{
    public string Name { get; set; }
    public int Order { get; set; }
}
public class BookDto
{
    public string Name { get; set; }
    public int OrderNum { get; set; }
}


在Controller中实现bookDto到book的转换。

public ActionResult Index()
{
    //在ModelMapper进行了配置,这里直接执行映射就可以。
    var model = Mapper.Map<Book>(new BookDto()
    {
        Name = "ahui",
        OrderNum = 100,
    });
    return View(model);
}


视图中的代码:

@{
    ViewBag.Title = "Index";
}
@model AutoMapper_Web.Domain.Book
<h2>Index</h2>
@Model.Name
@Model.Order


679140-20160325202838870-769371938.png


这样就成功了。以后想要在项目中使用就可以直接定义一个类实现上面的接口,我们就可以实现AutoMapper的转换。





目录
相关文章
|
XML 开发框架 前端开发
J2EE自定义mvc【框架配置及功能】
1、在增删改的方法里面我们这两行代码是一样的、重复的。类里面增加了一个通用的增删改的方法,我们在。我们新建一个web包,在里面新建一个。进行一个搜索,新增、修改、删除。进行一个通用的增删改的方法。BookDaoTest测试。测试我们的数据库能否连接。增加,修改的jsp界面。我们删除ID:16、22。导入之后我们选中所有的。2、代码逻辑是重复的。书籍名:圣墟1234。
|
6月前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
2月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
233 1
|
5月前
|
前端开发 Java 关系型数据库
在Spring3 MVC中五步配置集成注解方式Hibernate3
在Spring3 MVC中五步配置集成注解方式Hibernate3
41 3
|
6月前
|
前端开发 Java Spring
【Spring MVC】SpringMVC自动配置
【1月更文挑战第14天】【Spring MVC】SpringMVC自动配置
|
6月前
|
前端开发 JavaScript Java
Spring Boot中Spring MVC的基本配置讲解与实战(包括静态资源配置,拦截器配置,文件上传配置及实战 附源码)
Spring Boot中Spring MVC的基本配置讲解与实战(包括静态资源配置,拦截器配置,文件上传配置及实战 附源码)
220 1
|
11月前
|
XML 前端开发 JavaScript
SpringMVC中单独配置<mvc:default-servlet-handler/> 导致 Controller失效
SpringMVC中单独配置<mvc:default-servlet-handler/> 导致 Controller失效
272 0
|
XML 前端开发 Java
【Spring MVC 系列】Spring MVC 中 Filter 配置的 6 种方式,看看你了解哪些
Filter 简介 过滤器 Filter 在 Servlet 2.3 版本中被首次提出,唯一的作用就是过滤,它不仅可以过滤请求,还可以过滤响应,当请求到达 Servlet 容器,会先经过 Filter ,然后再交给 Servlet,之后 Filter 还可以对 Servlet 的响应进一步处理。并且多个 Filter 还能形成一个链。使用图示表达如下。
1099 0
【Spring MVC 系列】Spring MVC 中 Filter 配置的 6 种方式,看看你了解哪些
|
前端开发
mvc配置指定参数处理
mvc配置指定参数处理
52 0
|
前端开发 fastjson
mvc配置fastjson序列化枚举
mvc配置fastjson序列化枚举
120 0
下一篇
无影云桌面