首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoMapper vs ValueInjecter

AutoMapper vs ValueInjecter
EN

Stack Overflow用户
提问于 2011-01-12 06:49:46
回答 4查看 53.7K关注 0票数 209

每次我在StackOverflow上寻找AutoMapper的东西时,我都会读到一些关于ValueInjecter的东西。

谁能告诉我它们之间的优缺点(性能、功能、API使用、可扩展性、测试)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-13 04:38:07

作为ValueInjecter的创建者,我可以告诉您,我之所以这样做,是因为我想要一些简单灵活的

我真的不喜欢写太多或者写很多像这样的monkey code

代码语言:javascript
复制
Prop1.Ignore, Prop2.Ignore etc.
CreateMap<Foo,Bar>(); CreateMap<Tomato, Potato>(); etc.

ValueInjecter是一种类似的插件,你可以创建ValueInjections并使用它们

有一些用于扁平化和反扁平化的内置注入,还有一些是用于继承的。

它在的方面类型中工作得更多,你不必一对一地指定所有属性,相反,你可以这样做:

从名称以" Id“结尾的源中获取所有int属性,将值转换为源对象中具有相同名称但不带Id后缀的属性,其类型继承自实体,诸如此类

所以一个明显的区别是,即使在windows窗体中,ValueInjecter也可以通过展平和取消展平来使用,这就是的灵活性

(从对象到窗体控件以及从对象到窗体控件的映射)

Automapper,在windows窗体中不可用,没有非扁平化,但它有很好的东西,比如集合映射,所以如果你在ValueInjecter中需要它,你只需要这样做:

foos.Select(o => new Bar().InjectFrom(o));

还可以使用ValueInjecter从匿名和动态对象进行映射

differences:

Prop1.Ignore自动映射器为从任何对象到任何对象的每个可能的映射创建配置(也有一些情况,当您从CreateMap()

  • valueinjecter注入到valuetype)

  • automapper时,它具有扁平化构建它,并且仅对于简单类型或来自相同类型,并且它没有unflattening

  • valueinjecter,只有当您需要它时才使用target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection>,如果您希望从Foo.Bar.Name of type StringFooBarName of type Class1,则默认情况下继承FlatLoopValueInjection并以相同的名称指定Prop1.Ignore()属性,对于其余的映射,您必须逐个指定,并执行类似Prop1.Ignore()的操作。Prop2.Ignore() etc.

  • valueinjecter有一个默认的注入.InjectFrom(),它执行相同名称和类型的属性;对于其他方面,您可以使用单独的映射逻辑/规则创建自定义值注入,更像方面,例如,从类型Foo的所有道具到类型为Bar

的所有道具

票数 170
EN

Stack Overflow用户

发布于 2011-03-30 10:10:03

由于我从未使用过任何其他工具,因此我只能谈一谈AutoMapper。我对构建AutoMapper有几个目标:

  • 能够轻松地验证测试

  • 中的映射,允许从其他地方解析值的边缘用例(自定义类型->类型映射、单个成员映射和一些非常疯狂的边缘用例)。

如果你想做这些事情,AutoMapper非常适合你。AutoMapper做得不好的地方有:

填充现有objects

  • Unflattening

原因是我从来不需要做这些事情。在大多数情况下,我们的实体没有setter,不公开集合等,这就是它不存在的原因。我们使用AutoMapper来扁平化到DTO,并从UI模型映射到命令消息等等。这就是它对我们非常非常好的地方。

票数 59
EN

Stack Overflow用户

发布于 2011-01-13 05:07:04

我都试过了,而且更喜欢ValueInjecter,因为它太简单了:

代码语言:javascript
复制
myObject.InjectFrom(otherObject);

对于我的绝大多数注入需求,这就是我要知道的全部。它不可能比这更简单和优雅了。

票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4663577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档