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(); //这个方法中是那些配置文件,把那些全部实现初始化
}
}
这里是老大博客的解释:<自己在有些地方还是不太懂>
下来只需在程序的启动文件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
这样就成功了。以后想要在项目中使用就可以直接定义一个类实现上面的接口,我们就可以实现AutoMapper的转换。
附件:
“人生无赖” http://www.cnblogs.com/baiyunchen/p/3943942.html
Auto Mapper04(MVC中的配置)的更多相关文章
- MVC 中url-pattern配置为"/"和"/*"的区别
首先大家都知道"/*"可以匹配所有url,包括带扩展名的,一般只用在过滤器上. 而"/"很多人理解成不能拦截带扩展名的,这种理解是错误的!它其实也能拦截“.js ...
- Asp.net mvc中使用配置Unity
第一步:添加unity.mvc 第二步:在添加之后会在app_start中生成UnityConfig.cs,UnityMvcActivator.cs 第三步:使用 第四步:效果展示
- 在Asp.Net MVC 中配置 Serilog
Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...
- spring.Net之Ioc在MVC中的使用
1.引入dll Common.Logging.dll Spring.Core.dll Spring.Web.dll Spring.Web.Extensions.dll Spring.Web.Mvc4. ...
- AutoMapper在MVC中的运用01-配置、使用、单元测试、举例
MVC中,如果想在Domain Model和View Model之间建立映射,用AutoMapper是一个不错的选择.不仅如此,AutoMapper能在不同对象之间建立映射,比如string与int类 ...
- log4net 使用总结- (2)在ASP.NET MVC 中使用
log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二 ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案
近期有Linux ASP.NET用户反映,在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404(找不到网页) ...
随机推荐
- 前端神器avalonJS入门(二)
本章开始搭配requireJS来使用avalon,开始之前,我们可以对avalon进行精简改造(注:新版的avalon已提供了shim版本,无需再做如下的精简了,直接点这里获取). avalon源码里 ...
- 国庆送干货——前端建站实用UI工具vajoyJS
差不多是从七月开始有空就写一写,写到现在也算是可以拿出来展示了,vajoyJS是一款可以提供多项建站常用UI功能的插件库,让你轻松创建简易幻灯片.模态窗口和单屏滚页等效果.vajoyJS依赖于 jQu ...
- Rabbitmq基本原理
MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列 ...
- C# 获取当前日期在指定日期范围内是第几周
public static int GetWeekOfDay(DateTime start, DateTime end) { //总周数 )); //用于存储日期 var weekDic = new ...
- PHPer书单
想提升自己,还得多看书!多看书!多看书! 下面是我收集到的一些PHP程序员应该看得书单及在线教程,自己也没有全部看完.共勉吧! Github地址:https://github.com/52fhy/ph ...
- Atitti usrQBf1801 翻页控件规范 v2
Atitti usrQBf1801 翻页控件规范 v2 1. 参考api 参考easyui ,.net系列的1 1.1. 翻页流程 初始化翻页控件,以及绑定新页面event onSelectPa ...
- salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...
- ASP.NET MVC的Action拦截器(过滤器)ActionFilter
有时项目要进行客户端请求(action)进行拦截(过滤)验证等业务,可以使用拦截器进行实现,所谓的action拦截器也没有什么的,只是写一个类,继承另一个类(System.Web.Mvc.Filter ...
- mysql创建数据库
mysql创建数据库 创建utf8编码的数据库 CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_ ...
- Linux常用命令01
Linux对于我们来说,就是跑程序的运行平台,简单的来说,就是服务器,自己也没怎么系统的学习Linux的命令,随着项目的需要, 比如要查找日志,哪里出问题了,哪里报错了,因此自己也慢慢地懂一些常用的L ...