封装一个Automapper单例

  public class DataModule : IModule
    {
        public void Configure(IMapperConfigurationExpression cfg)
        {
            //cfg.CreateMap<ApproveAtcPo, ApproveAtcVo>().ReverseMap();

        }
    }
         /// <summary>
        /// 注册需要转换的类型
        /// </summary>
        private PoMapper()
        {
            AutoMapper.Mapper.Initialize(cfg =>
            {                //多模块注册方式
                new DataModule().Configure(cfg);
                new AliasModule().Configure(cfg);
            });
        }

 1     public class MapperTool
 2     {
 3         private static volatile MapperTool mapper = null;
 4         private static object syncRoot = new Object();
 5         public static readonly List<Type> typeList = null;
 6         /// <summary>
 7         /// 注册需要转换的类型
 8         /// </summary>
 9         private MapperTool()
10         {
11             Mapper.Initialize(cfg =>
12             {
13                 //指定不同属性映射demo
14                 //cfg.CreateMap<auth_userVo, t_auth_user>()
15                 //   .ReverseMap()
16                 //   .ForMember(dest => dest.id, opt => opt.MapFrom(src => src.rid))
17                 //   .ForMember(dest => dest.update, opt => opt.MapFrom(src => src.create));
18
19             });
20             //验证是否所有字段都转换了
21             //Mapper.Configuration.AssertConfigurationIsValid();
22         }
23
24         private MapperTool(List<Type[]> TypeList)
25         {
26             Mapper.Initialize(cfg =>
27             {
28                 foreach (var type in TypeList)
29                 {
30                     cfg.CreateMap(type[0], type[1]).ReverseMap();
31                 }
32             });
33         }
34
35
36         /// <summary>
37         /// 初始化注册Mapper
38         /// </summary>
39         public static MapperTool Instance
40         {
41             get
42             {
43                 if (mapper == null)
44                 {
45                     lock (syncRoot)
46                     {
47                         if (mapper == null)
48                         {
49                             mapper = new MapperTool();
50                         }
51
52                     }
53                 }
54                 return mapper;
55             }
56         }
57
58         /// <summary>
59         /// 传入需要转换的对象
60         /// </summary>
61         /// <typeparam name="F">需要转换的对象类型</typeparam>
62         /// <typeparam name="T">转换目标对象类型</typeparam>
63         /// <param name="f">需要转换的对象</param>
64         /// <returns>目标对象</returns>
65         public T Map<F, T>(F f)
66             where F : new()
67             where T : new()
68         {
69             return Mapper.Map<F, T>(f);
70         }
71     }

原文地址:https://www.cnblogs.com/zzlblog/p/10013182.html

时间: 2024-10-07 10:26:24

封装一个Automapper单例的相关文章

C# 创建单例窗体封装

在制作Winform程序时,有时会点击按钮弹出一个form窗体,即点击按钮事件中会创建一个新的form窗体,为了无论点击按钮多少次都只显示同样的form窗体 ,以下为一个创建单例窗体的封装类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SetWhiteList { /// <summary

Java单例设计模式(实现Java的一个类只有一个对象)

单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类. 核心便是希望一个类只有一个对象.  如何实现类在内存中只有一个对象呢? 第一步:构造私有:第二步:本身提供一个对象:第三步:通过公共的方法让外界访问. 以下就是实现单例类: static关键字修饰对象,则该对象就变成静态资源,共享,形象点说,她就失足了,谁都可以上! class Single{ private static Single s = new Single(); //声明本类的引用类型变量,并且

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一

属性传值,协议传值,block传值,单例传值四种界面传值方式

一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N + 1界面传值.而在此基础上,必须知道跳转界面的明确位置及所要传的值的具体类型.在第二个界面中声明所要传值 类型的属性. @interface SecondViewController : UIViewController //声明一个字符串属性来保存第一个界面传过来的字符串内容 @propert

滥用单例

原文: http://objccn.io/issue-13-2/ 单例是整个 Cocoa 中被广泛使用的核心设计模式之一.事实上,苹果开发者库把单例作为 "Cocoa 核心竞争力" 之一.作为一个iOS开发者,我们经常和单例打交道,比如 UIApplication 和 NSFileManager 等等.我们在开源项目.苹果示例代码和 StackOverflow 中见过了无数使用单例的例子.Xcode 甚至有一个默认的 "Dispatch Once" 代码片段,可以使

单例01

1. Code: @interface SAMNetworkingTool : NSObject + (instancetype)shareNetworkingTool; @end @implementation SAMNetworkingTool static id instance; // 因为历史遗留问题,每次调用alloc的时候都会先调用allocWithZone + (instancetype)allocWithZone:(struct _NSZone *)zone{ static d

java的单例

原文出处: 张新强 1. 前言 单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的--基本上每个开发者都能够随手写出--但是,真的是这样吗?作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了.我并不想危言耸听说一定还有你不知道的--毕竟我自己的了解也的确有限,但究竟你自己了解的程度到底怎样呢?往下看,我们一起来聊聊看~ 2. 什么是单例? 单例对象的类必须保证只有一个实例存在--这是维基百科上对单例的定义,这也可以作为对意图实现单例模式的代码进行

一次性代码(单例)

//  CZTool.h 一次性代码 #import <Foundation/Foundation.h> @interface CZTool : NSObject // 用单例设计模式,可以节省内存. // 书写单例 // 1. 对外提供一个获取单例对象的接口(API) +(instancetype)sharedCZTool; @end //  CZTool.m 一次性代码 #import "CZTool.h" @implementation CZTool // 定义一个全

避免滥用单例

单例是整个 Cocoa 中被广泛使用的核心设计模式之一.事实上,苹果开发者库把单例作为 "Cocoa 核心竞争力" 之一.作为一个iOS开发者,我们经常和单例打交道,比如 UIApplication 和 NSFileManager 等等.我们在开源项目.苹果示例代码和 StackOverflow 中见过了无数使用单例的例子.Xcode 甚至有一个默认的 "Dispatch Once" 代码片段,可以使我们非常简单地在代码中添加一个单例: + (instancetyp