首页 > 其他分享 >.NET6 配置 AutoMapper 与 AutoFac

.NET6 配置 AutoMapper 与 AutoFac

时间:2023-11-02 13:57:02浏览次数:31  
标签:容器 AutoFac core Autofac AutoMapper NET6 net 注入

AutoMapper

 

概述
1、什么是AutoMapper
简单来说,AutoMapper就是一个用C#语言开发的一个轻量的处理一个实体对象到另外一个实体对象映射关系的组件库

 

官网地址:AutoMapper

 

文档地址:AutoMapper — AutoMapper documentation

 

2、为什么要用AutoMapper
层与层之间的数据转换是非常常见的事情,最简单的方式就是手动复制,(尤其使用SqlSugar之后,如果不做特殊处理,数据查询的结果一般为全字段,但是在业务层,我们提供的对外接口一般只返回有限的部分字段)当然,使用AutoMapper之后可以大大简化繁琐的工作。

快速开始

 

一、Net 6环境下的.net core项目里如何使用AutoMapper实现依赖注入。

  注: AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象。

  第一步,在Nuget引入AutoMapper、AutoMapper.Extensions.DependencyInjection这两个NuGet包

 

  第二步,定义Profile,方便对注入服务进行管理:

 

 

 

  第三步,在Program.cs中注册:

 

  第四步,在构造函数中注入:

 

   第五步,在方法中进行调用Map存储:

 

   主要负责将一个数据对象的数据映射到另一个模型上 RoleDto=>Role 这样一个映射关系

AutoFac

 

1 基本概念

1.1 相关名词

依赖倒置(DIP)

控制反转(IoC:Inversion of control)

注入(DI:Dependency injection)

1.2 个人理解

DIP 依赖倒置原则:程序要依赖于抽象,不要依赖于细节(具体实现)。其中抽象一般指接口(Interface),细节指类(Class)。

IoC 一般翻译为控制反转,主要是为了降低模块与模块之间代码的耦合度,是一种理念,一种设计原则。

DI 是 IoC 的一种实现方式,为依赖注入的方式。具体做法就是通过一个统一的容器(DI 容器),来管理对象的创建和生命周期。

2 使用步骤

2.1 基本使用

  1. 引入 Autofac
  2. 在程序入口处:创建容器(Create a ContainerBuilder),注册服务/组件(Register Components),构建并存储容器(Build and store)
  3. 在程序执行过程中:从容器中创建拥有生命周期的实例(lifetime scope)

一、Net 6环境下的.net core项目里如何使用Autofac实现依赖注入。

 

  通常的,我们把其他服务注入到Controller时,使用.net core自带的依赖注入即可,但是如果我们要实现自定义服务注册时,就要用到第三方IOC容器组件。推荐Autofac。

 

  第一步,在Nuget引入Autofac、Autofac.Extensions.DependencyInjection这两个NuGet包

 

 

  第二步,定义Module,方便对注入服务进行管理:

 

 

 

 

 

 

  这里注意:根据名称约定 查询到的程序集 的命名规则必须规范 否则可能读取不到 对应的数据集 从而报错

 

  

 

  第三步,在Program.cs中注册:

 

 

 

 

 

  new AutoFacManager() 调用我们定义的方法

 

  第四步,在构造函数中注入:

 

  

 

 

 

 

 

   这里 我们就不用再像 如下方法单个引用 

 

 

 

 

  Autofac 会自己储存到IOC容器里面进行控制反转 实现接口 从而省去很多代码

 

  现在就跟.net core自带的注入方式用法一样,这里直接注入Controller了,往其他层注入也是一样的写法。

标签:容器,AutoFac,core,Autofac,AutoMapper,NET6,net,注入
From: https://www.cnblogs.com/iamlcw/p/17805212.html

相关文章

  • .NET6 使用AutoMapper
    .NET6使用AutoMapper 一、Net6环境下的.netcore项目里如何使用AutoMapper实现依赖注入。注:AutoMapper是一个对象-对象映射器,可以将一个对象映射到另一个对象。第一步,在Nuget引入AutoMapper、AutoMapper.Extensions.DependencyInjection这两个NuGet包  ......
  • NET6介绍及环境准备
    NET6介绍及环境准备https://www.cnblogs.com/michael999/p/16878990.html部署IIS6或7出现的问题总结https://www.cnblogs.com/xuezhu/p/17407826.html......
  • .Net6添加Swagger
    .Net6添加Swagger一.添加Swagger引用添加Swashbuckle.AspNetCore包二.使用Swagger1.新建TestController控制器[ApiController][Route("[controller]/[action]")]publicclassTestController:Controller{///<summary>///获取信息///</summary>......
  • .Net6 扩展Swagger
    .Net6扩展Swaggernet6集成了swagger的基础功能,但功能不够用因此只能自定义扩展方法了,如下1、集成Jwt授权将builder.Services.AddSwaggerGen();改成builder.Services.AddSwaggerGen(c=>{varscheme=newOpenApiSecurityScheme(){Description="......
  • 使用.Net6中的System.Text.Json遇到几个常见问题及解决方案
    前言以前.NetCore是不内置JSON库的,所以大家都用Newtonsoft的JSON库,而且也确实挺好用的,不过既然官方出了标准库,那更方便更值得我们多用用,至少不用每次都nuget安装Newtonsoft.Json库了。不过日常开发使用中会有一些问题,本文记录一下解决方法,欢迎交流~字符编码问题默认的 System......
  • 让AutoMapper使用变得简单
     倘若在项目中真正要用的时候,我觉得还是应该对AutoMapper的方法进行一些整理,最好能够封装一下,这里我通过扩展方法的形式将其封装为AutoMapperHelper,这样以后使用AutoMapper就变的SOEASY了~ usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Data......
  • Autofac.Core.DependencyResolutionException-DefaultObjectMapper
    异常: 解决方法在模块配置AutoMapper的配置文件处修改validate参数的值true改为false ......
  • .NET6 startup.cs 注入 本地缓存,AddTransient ,AddScoped ,AddSingleton生命周期
    .NET6startup.cs注入本地缓存//使用缓存usingMicrosoft.Extensions.Caching.Memory;services.AddMemoryCache();//自定义缓存类,类继承接口services.AddScoped<IMemoryCacheHelper,MemoryCacheHelper>();service.cs里使用构造函数注入生成对象方法里调用对象的写,获取......
  • Asp.Net Core webapi+net6 使用资源筛选器(过滤器) 做缓存
    写一个特性类,用来做标记[AttributeUsage(AttributeTargets.Method)]//只对方法有效publicclassResourceFilterAttribute:Attribute{}我这里使用了MemoryCache来做缓存,也可以使用字典来做,但一定要加上static,否则字典每一次请求都会new一个实例,缓存的东西就丢了private......
  • ASP .Net Core: AutoMapper与DTO的使用(自定类型转换)
    建立DTO物件创建名为Dtos文件夹,并添加TodoListSelectDto文件publicclassTodoListSelectDto{publicGuidTodoId{get;set;}publicstringName{get;set;}=null!;publicDateTimeInsertTime{get;set;}publicDateTimeUpdateTime{get......