首页 > 其他分享 >.netCore之Automapper映射封装

.netCore之Automapper映射封装

时间:2024-02-22 18:45:03浏览次数:30  
标签:封装 映射 netCore 特性 Automapper Type public

1.Automapper解说
Automapper是一个对象与对象的关系映射库,目的就是帮助你实现源类型到目标类型的对象之间的映射

2.Automapper的封装
A.中间件中添加注册

点击查看代码
 //Automapper映射
 builder.Services.AddAutoMapper(typeof(AutoMapperConfigs));
B.添加特性公共类获取数据源类型与目标类型
点击查看代码
    //定义了一个特性类  命名方式:特性名+Attribute
    //特性:加注释
    //步骤1:定义特性类
    //步骤2:构建自定义特性 
    [AttributeUsage(AttributeTargets.Class)]//指定应用目标:类
    public class AutoMapperAttribute : Attribute
    {
        public Type Sourse { get; set; }
        public Type Des { get; set; }
        /// <summary>
        /// 获取源和目标类型
        /// </summary>
        /// <param name="source"></param>
        /// <param name="des"></param>
        public AutoMapperAttribute(Type source, Type des)
        {
            Sourse = source;
            Des = des;
        }
    }
C.添加对象映射公共类
点击查看代码
    /// <summary>
    /// Dto的映射配置
    /// </summary>
    public class AutoMapperConfigs: Profile
    {
        public AutoMapperConfigs()
        {
            #region 非封装下:每队源类和目标类需要一一添加映射关系,扩展性差
            //用户
            //CreateMap<User, UserRes>();
            #endregion

            #region  封装映射实现:反射+特性
            //获取程序集
            var assembly =Assembly.Load("Model");
            var list = new List<Type>();
            //遍历程序集下的类型
            foreach(var item in assembly.GetTypes())
            {
                //判断该类型是否标记AutoMapperAttribute特性
                if (item.IsDefined(typeof(AutoMapperAttribute), true))
                {
                    var type=item.GetCustomAttribute<AutoMapperAttribute>();
                    Type source = type.Sourse;
                    Type des = type.Des;
                    //源数据与目标数据的映射
                    CreateMap(source, des);
                }
            }
            #endregion
        }
    }
D. E. F.

标签:封装,映射,netCore,特性,Automapper,Type,public
From: https://www.cnblogs.com/cmrong/p/18027935

相关文章

  • .Net Core Entity Framework Core 的基础封装
    上篇讲到  c#UnitofWork知识分享时,对于创建DBContext的封装没有讲到,这次分享跟大家publicinterfaceIDbContextFactory{DbContextCreateDbContext(stringconnectionString);}///<summary>///这里实现的思路是根据用户输入的代码来决定链接的是哪个数据库......
  • c#文件操作简单封装工具类
    因为在.netmvc中 File类命名空间总是冲突,自己封装了一个FileHelper类,今日分享给大家1///<summary>2///Provideshelpermethodsforfileoperations.3///</summary>4publicstaticclassFileHelper5{67///<summary>8///Downl......
  • c# Http请求封装工具类
    1publicclassHttpHelper2{3///<summary>4///GetthecontentofafilefromthespecifiedURL.5///</summary>6///<paramname="url">TheURLtorequest.</param>7///<......
  • c#发送邮件的简单封装类
    1publicclassEmailSender2{3privatestringsmtpServer;4privateintsmtpPort;5privatestringsenderEmail;6privatestringsenderPassword;7privatestringsubjectPrefix;8privatestringemailContex......
  • 分享个我自己封装的Datatable拓展
    废话不多说,直接上代码1publicstaticclassDataTableExtensions2{3///<summary>4///DetermineswhethertheDataTableisnullorempty.5///</summary>6///<paramname="dt">TheDataTabletocheck.<......
  • 超省电LCD液晶段码驱动芯片VKL144A/B 超薄封装 适用于燃气表,瓦斯表等产品
    由于煤气罐的使用安全隐患较大,现在大部分城市使用管道输送燃气,燃气表的计费大都是通过远程抄表的方式,或者充值的方式,为了让用户更好地了解自家燃气表的使用情况,需要一款液晶屏来显示燃气表的状态和用气量等信息,而燃气表通常选用超低功耗的芯片来进行显示驱动。超低功耗的芯片,由于......
  • 改造Aforge.Video在.NetCore中使用
    Aforge.Video是可以方便获取摄像头等视频输入设备图像的轻量级组件,但是该组件的最新版本2.2.5大约是在2013年发布的,仅支持.NetFramework,在基于.Net6的Winform中无法使用。Aforge.Video组件存在开源项目AForge.NET中,该项目有1kStars(2024.02)。本文的改造思想是将项目中使......
  • .net core 读取appsetting.json 封装
    /*需要引入的包Microsoft.Extensions.Configuration-提供配置的核心功能。Microsoft.Extensions.Configuration.Json-支持从JSON文件加载配置。Microsoft.Extensions.Configuration.FileExtensions-支持文件相关的配置,如设置基路径。Microsoft.Extensions.Configura......
  • NSSM - 将exe,dll,jar封装成windows服务的神器
    NSSM(theNon-SuckingServiceManager)是Windows环境下一款免安装的服务管理软件,它可以将应用封装成服务,即将普通exe程序或者dll或者jar包应用,封装成服务使之像windows服务可以设置自动启动等。并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能。Installingf......
  • bignumber封装加减乘除
    //导入bignumber.js库const{BigNumber}=require('bignumber.js');//封装加法函数functionadd(a,b){constresult=newBigNumber(a).plus(b);returnresult.toString();}//封装减法函数functionsubtract(a,b){constresult=newBigNumber(a).minus(b)......