一尘不染

AutoMapper与ValueInjecter [关闭]

c#

每当我在StackOverflow上寻找AutoMapper内容时,我都会在阅读有关ValueInjecter的内容

有人可以告诉我它们之间的优缺点(性能,功能,API使用率,可扩展性,测试)吗?


阅读 329

收藏
2020-05-19

共1个答案

一尘不染

作为ValueInjecter的创建者,我可以告诉你我这样做是因为我想要
简单,非常灵活的* 东西 *

我真的不喜欢写太多或写很多monkey code类似的东西:

Prop1.Ignore, Prop2.Ignore etc.
CreateMap<Foo,Bar>(); CreateMap<Tomato, Potato>(); etc.

ValueInjecter 类似于mozilla,带有其插件, 您可以创建ValueInjections并使用它们

有内置的用于扁平化,非扁平化的注入,还有一些旨在继承

并且它 以方面类型的方式 工作得更多,您不必指定所有属性为1对1,而是可以执行以下操作:

从名称中以“
Id”结尾的源中获取所有int属性,转换值并将每个属性设置为源对象中具有相同名称的属性(不带Id后缀),并且其类型从Entity继承,诸如此类

所以一个明显的区别是,ValueInjecter即使在具有展平和展平的Windows窗体中也可以使用,这就是它的灵活性

(从对象映射到窗体控件,然后再返回)

Automapper,在Windows窗体中不可用,没有展开,但是它具有诸如集合映射之类的好东西,因此,如果需要ValueInjecter来使用它,则可以执行以下操作:

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

您还可以使用ValueInjecter来映射 匿名动态 对象

差异:

  • 自动映射器为每种映射可能性创建配置CreateMap()

  • 从任何对象到任何对象的valueinjecter注入(在某些情况下,从对象到valuetype的注入)

  • automapper已构建扁平化,并且仅用于简单类型或相同类型,并且不具有扁平化

  • valueinjecter只有当你需要它,你做的target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection> ,如果你想从Foo.Bar.Name of type StringFooBarName of type Class1你继承FlatLoopValueInjection并指定此

  • 默认情况下,automapper映射具有相同名称的属性,对于其余属性,您必须一个一个地指定,并执行诸如Prop1.Ignore(),Prop2.Ignore()等操作。

  • valueinjecter具有默认的注入.InjectFrom(),其名称和类型相同;除此以外,您还可以使用单独的映射逻辑/规则创建自定义值注入,更像是方面,例如 从Foo类型的所有道具到Bar类型的所有道具

2020-05-19