AutoMapper官方文档(十四)【依赖注入】

AutoMapper 使用手册以及扩展 可以看到,映射后,dto 中两个元素的类型,一个是 EmployeeDto,一个是 EmployeeDto2,即实现了父类映射到父类,子类映射到子类。/// 数据源的成员变量的命名规则。/// 数据源的成员变量的命名规则。/// new PascalCaseNamingConvention() 帕斯卡命名规则(每个单词的首字母大写) 阅读详情

AutoMapper支持使用静态服务定位构建自定义值解析器和自定义类型转换器的能力:

Mapper.Initialize(cfg =>
{
    cfg.ConstructServicesUsing(ObjectFactory.GetInstance);

    cfg.CreateMap<Source, Destination>();
});

或动态服务定位,用于基于实例的容器(包括 子/嵌套 容器):

var mapper = new Mapper(Mapper.Configuration, childContainer.GetInstance);

var dest = mapper.Map<Source, Destination>(new Source { Value = 15 });

一个意想不到或不直观的错误

使用DI与使用IQueryable.ProjectTo扩展方法有效地互斥。使用IEnumerable.Select(_mapper.Map<DestinationType>).ToList()来代替。

ASP.NET Core

有一个NuGet包与这里描述的默认注入机制一起使用。

Ninject注入框架

对于那些使用Ninject的人来说,这是一个用于AutoMapper的Ninject模块的例子

public class AutoMapperModule : NinjectModule
{
    public override void Load()
    {
        Bind<IValueResolver<SourceEntity, DestModel, bool>>().To<MyResolver>();

        var mapperConfiguration = CreateConfiguration();
        Bind<MapperConfiguration>().ToConstant(mapperConfiguration).InSingletonScope();

        // This teaches Ninject how to create automapper instances say if for instance
        // MyResolver has a constructor with a parameter that needs to be injected
        Bind<IMapper>().ToMethod(ctx =>
             new Mapper(mapperConfiguration, type => ctx.Kernel.Get(type)));
    }

    private MapperConfiguration CreateConfiguration()
    {
        var config = new MapperConfiguration(cfg =>
        {
            // Add all profiles in current assembly
            cfg.AddProfiles(GetType().Assembly);
        });

        return config;
    }
}

简单的注入器

工作流程如下:

     通过MyRegistrar.Register注册您的类型
     MapperProvider允许您直接将IMapper的一个实例注入到其他类中
     SomeProfile使用PropertyThatDependsOnIocValueResolver解析一个值
     PropertyThatDependsOnIocValueResolver已经注入IService,然后可以使用

ValueResolver可以访问IService,因为我们通过MapperConfigurationExpression.ConstructServicesUsing注册我们的容器

public class MyRegistrar
{
    public void Register(Container container)
    {
        // Injectable service
        container.RegisterSingleton<IService, SomeService>();

        // Automapper
        container.RegisterSingleton(() => GetMapper(container));
    }

    private AutoMapper.IMapper GetMapper(Container container)
    {
        var mp = container.GetInstance<MapperProvider>();
        return mp.GetMapper();
    }
}

public class MapperProvider
{
    private readonly Container _container;

    public MapperProvider(Container container)
    {
        _container = container;
    }

    public IMapper GetMapper()
    {
        var mce = new MapperConfigurationExpression();
        mce.ConstructServicesUsing(_container.GetInstance);

        var profiles = typeof(SomeProfile).Assembly.GetTypes()
            .Where(t => typeof(Profile).IsAssignableFrom(t))
            .ToList();

        mce.AddProfiles(profiles);

        var mc = new MapperConfiguration(mce);
        mc.AssertConfigurationIsValid();

        IMapper m = new Mapper(mc, t => _container.GetInstance(t));

        return m;
    }
}

public class SomeProfile : Profile
{
    public SomeProfile()
    {
        var map = CreateMap<MySourceType, MyDestinationType>();
        map.ForMember(d => d.PropertyThatDependsOnIoc, opt => opt.ResolveUsing<PropertyThatDependsOnIocValueResolver>());
    }
}

public class PropertyThatDependsOnIocValueResolver : IValueResolver<MySourceType, object, int>
{
    private readonly IService _service;

    public PropertyThatDependsOnIocValueResolver(IService service)
    {
        _service = service;
    }

    int IValueResolver<MySourceType, object, int>.Resolve(MySourceType source, object destination, int destMember, ResolutionContext context)
    {
        return _service.MyMethod(source);
    }
}
WPF使用依赖注入框架AutoMapper ​​清晰的依赖管理​​:通过DI容器管理所有服务生命周期​​高效的对象映射​​:使用AutoMapper简化对象转换​​可维护的架构​​:分层设计使代码更易于理解和维护​​可测试性​​:依赖注入使单元测试更加容易​​灵活性​​:可以轻松替换实现或添加新功能这种架构特别适合中大型WPF应用,能够有效管理复杂性并提高开发效率。 阅读详情

相关推荐

课程11:仓储层Repository实现、AutoMapper自动映射

本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。专栏适用于人群:Web后端开发人员本课程内容:1、仓储层Repository实现2、Repository依赖注入3、AutoMapper使用方法4、AutoMapper依赖注入。

成长的足迹 1125

2.1配置(AutoMapper官方文档翻译)

automapper configuration

yan_yu_lv_ji的博客 653

掌握AutoMapper:.NET对象映射专家指南

AutoMapper是一个.NET库,它用于在对象模型之间自动进行类型转换(映射)。它被设计用来尽可能地减少代码量,尤其是在数据传输对象(DTOs)和模型之间的映射上。AutoMapper使用约定和约定优于配置的原则,同时支持自定义映射。

weixin_33193177的博客 999

AutoMapper官方文档(一)【入门】

什么是AutoMapper?AutoMapper是一个对象与对象的映射器。对象-对象映射通过将一种类型的输入对象转换为不同类型的输出对象来工作。让AutoMapper感兴趣的是,它提供了一些有趣的约定,从而弄清楚如何将类型A映射到类型B.只要类型B遵循AutoMapper建立的约定,映射两种类型几乎就是零配置。为什么使用AutoMapper?映射代码很无聊。测试映射代码更无聊。 AutoMapper

极客神殿 8244

.NET Core中依赖注入AutoMapper的方法示例

本文主要介绍了关于.NET Core中依赖注入AutoMapper的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在 review 代码时发现同事没有像其他项目那样使用 AutoMapper.Mapper.Initialize() 静态方法配置映射,而是使用了依赖注入 IMapper 接口的方式 services.AddSingleton<IMapper>(new Mapper(new MapperConfiguration(cfg => { cfg.CreateMap<User>(); }))); 于是趁机学习了解一下,在

抖音直播行为规范考试

抖音直播行为规范考试

Q1642968641的博客 1万+

1.1入门指南(AutoMapper官方文档翻译)

AutoMapper是一个对象-对象映射器。对象-对象映射的工作原理是将一种类型的输入对象转换为不同类型的输出对象。AutoMapper的有趣之处在于,它提供了一些有趣的约定,将如何将类型A映射到类型B的繁琐工作解决掉。只要类型B遵循AutoMapper的既定约定,映射两个类型几乎不需要任何配置。

yan_yu_lv_ji的博客 919

生信入门第七课:使用FastQC软件进行测序原始fastq数据质控

从实验到数据:RNA定量、文库片段长度、fastqc质控和fastp去接头

微生信 486

.Net Core 6.0 依赖注入的方式使用AutoMapper

AutoMapper是一款单向映射器,是基于对象到对象约定的映射工具,常用于(但并不仅限制于)把复杂的对象模型转为DTO,一般用于ViewModel模式和跨 服务范畴。 AutoMapper给用户提供了便捷的配置API,就像使用约定来完成自动映射那样。 AutoMapper包含以下功能:平展、投影、配置验证、列表和数组、嵌套映射、自定义类型转换程序、自定义值转换程序 、自定义值格式程序 、Null值替换。 Nuget:AutoMapper 1、入口配置 ...

qq_26900081的博客 5788

电子系统设计与创新实践作品:简易电子琴

题目 4:简易电子琴 (1)具有8个音阶按键,每个音阶按键频率如表1所示。 (2)每个按键对应LED显示。 (3)音阶信号经功放连接8欧姆扬声器,输出功率可达1W。 (4)每个音阶输出音量一样。 (5)扬声器输出音量可调节,音量调节分为高、中、低三档,并进行档位显示。

weixin_47510497的博客 2856

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2787

AutoMapper入门

AutoMapper 是一个 .NET 类库,它能自动在两个类型之间做映射,尤其是当这些类型拥有相似属性时。它减少了手动编写的重复性劳动。set;set;set;set;set;set;可以直接通过 AutoMapper 在这两者之间做转换,而无需显式赋值。

R3333355726856的博客 1672

【codex教程】Codex 注册和使用教程(2026最新版)

Codex 是 OpenAI 推出的 AI 编程助手,可以帮助开发者阅读代码、修改代码、运行命令、生成测试、排查 bug、做代码审查,也可以在终端、IDE、Codex App 或网页端使用。根据 OpenAI 帮助中心,截至 2026 年 6 月,Codex 已包含在 Free、Go、Plus、Pro、Business、Edu 和 Enterprise 等 ChatGPT 方案中,但不同套餐的使用额度会有所不同。适合开发者在终端中使用。如果你想在命令行里使用 Codex,可以安装 Codex CLI。

与时俱进,开放共享 2万+

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能

前言在使用PRISM+WPF开发项目的过程中,需要使用AutoMapper实现对象-对象的映射功能。无奈PRISM没有相关对AutoMapper相关的类库,于是转换一下思想,在nuget ...

dotNET跨平台 1478

[调参神器]使用VOFA+上位机进行PID调参(附下位机代码)

​ 简单地来说,VOFA+是一个超级串口助手,除了可以实现一般串口助手的串口数据收发,它还可以实现数据绘图(包括直方图、FFT图),控件编辑,图像显示等功能。​ 如果只是想要用VOFA+来进行数据绘图,直接使用一个波形图控件就行,但是如果想要把VOFA+当作一个长期使用的调参助手,我们最好设置一下控件。VOFA+简洁好用,但是又有点太简洁了,部分体验并不是很好(比如不能调整控件大小,保存文件不太方便等),所以如果学有余力,推荐自己用QT/PyQT写上位机。接下来,我们要将指令中的数据提取出来。

qq_56089182的博客 4万+

理想汽车智驾方案介绍 4 World model + 强化学习重建自动驾驶交互环境

本帖将以 DrivingSphere 为例来解析这个过程。

地平线开发者 1920

.NET Core 中依赖注入 AutoMapper 小记

最近在 review 代码时发现同事没有像其他项目那样使用 AutoMapper.Mapper.Initialize() 静态方法配置映射,而是使用了依赖注入 IMapper 接口的方式 services.AddSingleton&lt;IMapper&gt;(new Mapper(new MapperConfiguration(cfg =&gt; { cfg.CreateMap...

weixin_33717117的博客 2447

Python编程基础05:运算符与表达式

文章目录一、算术运算符1、分类说明表2、注意事项3、案例演示任务1、计算成绩差与平均成绩课堂练习:编程处理带余除法。任务2、打印购物小票 运算符就是专门用于告诉程序执行特定运算或逻辑操作的符号。表达式是指由常量、变量和运算符组成的一个算式。编写程序对数据进行处理,其实处理就是对数据实施各种各样的运算,搞懂运算符与表达式是我们编写程序的基础性工作,本次讲课笔记通过案例讲解各种运算符的用法以及正确书写Python表达式的注意事项。 一、算术运算符 Python中的算术运算符就是用来处理四则运算的符号,也是

howard2005的专栏 3119

C# AutoMapper 10个常用方法总结

AutoMapper 是一个强大的对象映射库,用于简化和自动化复杂对象之间的转换。本文是 AutoMapper 一些常用的方法和功能总结。

yangshuquan的专栏 1817

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

AutoMapper 10.0使用教程

这里有个目录什么是AutoMapper配置使用MapperConfiguration配置使用Profile Instances配置Naming Conventions(命名约定)Replacing characters (替换字符)Recognizing pre/postfixes 识别前/后缀Visibility 配置可见性Configuration compilation 配置编译Dependency Injection (依赖注入)Queryable Extensions 可查询扩展例子ASP.NET

码农01号的博客 1661

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

终极指南:AutoMapper与依赖注入在ASP.NET Core中的完美集成

AutoMapper是一个基于约定的对象映射器,它通过依赖注入机制在ASP.NET Core应用程序中提供了无缝的集成体验。本文为您详细介绍如何将AutoMapper与ASP.NET Core的依赖注入系统完美结合,让对象映射变得更加简单高效。 ## 为什么选择AutoMapper依赖注入? 🤔 AutoMapper的依赖注入功能让您能够: - **自动扫描Profile配置**:无需手动注

gitblog_01021的博客 418

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

AutoMapper 9.0 在.Net Core 下的使用教程

AutoMapper升级为9.0之后,优化了(简化了)很多使用方法,特别是结合Core系统本身的一些改进,造成了曾经的9.0 以前版本不一样的地方。现做一个总结,代码再某个角度上讲还可以进行优化,欢迎大佬斧正。 环境 vs2019 .Net Core 3.0 AutoMapper 9.0 项目 .Net Core WebApi *step 0: 本文从Core自带的DI方...

码农生涯 3927

C# AutoMapper

} }} } }} } }} } }在上面的示例中,我们创建了一个类,并在其中定义了到的映射规则。} } }} } }} } }} } }在上面的示例中,我们使用了方法来为所有成员应用相同的映射策略。方法使用了反射来动态获取对象的属性值。

标准都是留给不爱的人,爱的本质是自由意志的沉沦 1357

QuickLib核心功能全解析:AutoMapper、LinQ、IOC如何简化你的代码

QuickLib是一个功能强大的跨平台开发库,支持Delphi/Firemonkey(Windows、Linux、OSX/IOS/Android)和Free Pascal(Windows/Linux),集成了AutoMapper、LinQ、IOC依赖注入、MemoryCache、定时任务、Json和Yml配置等实用功能,能显著提升开发效率,简化代码结构。 ## 🚀 为什么选择QuickLib?

gitblog_01058的博客 792
上一篇: AutoMapper官方文档(十三)【值转换器,Null替换,Map行为前后】
下一篇: AutoMapper官方文档(十五)【映射继承】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值