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(找不到网页) ...
随机推荐
- 我的ORM之三 -- 更新
我的ORM索引 更新语法 var 影响行数 = dbr.表.Update(实体).Where(条件).Execute(); 实体类型: 更新的实体类型和添加的实体类型一样,有三类: 1. 任何C#类. ...
- 【推荐】【给中高级开发者】构建高性能ASP.NET应用的几点建议
本篇目录 早期阶段就要对应用进行负载测试 使用高性能类库 你的应用是CPU密集还是IO密集的 使用基于Task的异步模型,但要慎重 分发缓存和会话(session)状态 创建Web Gardens 巧 ...
- Win10 UWP开发中的重复性静态UI绘制小技巧 2
小技巧1 地址:http://www.cnblogs.com/ms-uap/p/4641419.html 介绍 我们在上一篇博文中展示了通过Shape.Stroke族属性实现静态重复性UI绘制,使得U ...
- 作业七:团队项目——Alpha版本冲刺阶段-08
昨天进展:代码编写. 今天安排:代码编写.
- Entity Framework 5.0系列之数据操作
Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象:跟踪对象所做的更改:并发处理:将对象更改传播到数据源等.今天我们就一起讨论如何 ...
- 走进AngularJs(八) ng的路由机制
在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP.为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而a ...
- Linux tr命令
介绍 tr命令可以对来自标准输入的字符进行替换.压缩和删除.tr只能接收来自标准的输入流,不能接收参数. 语法 tr [OPTION]... SET1 [SET2] 注意:SET2是可选项 OPTIO ...
- Window Ghosting
最近工作中遇到Window Ghosting这个问题, 感觉挺有意思,这里简单记录下. 在XP时代我们的程序没有响应后只能通过任务管理器强制杀掉,但是Vista之后情况变了, 我们仍然可以拖动失去响应 ...
- No resource found that matches the given name 'android:Widget.Material.A解决方案
1:首先新建空白工作区 2:先import appcompat_v7 appcompat_v7在一个类似这样的地方, C:\mywork\android\android-sdk-windows\ext ...
- jQuery实现在线文档
1.1.1 摘要 现在,许多网站都提供在线图片和图书阅读的功能,这种方式比下载后阅读来的直观和人性化,要实现该功能涉及到点击处理和图片动态加载. 在接下来的博文中,我们将通过Javascript方式实 ...