作为ValueInjecter的创建者,我可以告诉你我这样做是因为我想要
简单,非常灵活的* 东西 *
我真的不喜欢写太多或写很多
monkey pre类似的东西:
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 String
给FooBarName of type Class1
你继承FlatLoopValueInjection并指定此默认情况下,automapper映射具有相同名称的属性,对于其余属性,您必须一个一个地指定,并执行诸如Prop1.Ignore(),Prop2.Ignore()等操作。
valueinjecter具有默认的注入.InjectFrom(),其名称和类型相同;除此以外,您还可以使用单独的映射逻辑/规则创建自定义值注入,更像是方面,例如 从Foo类型的所有道具到Bar类型的所有道具


![AutoMapper与ValueInjecter [关闭] AutoMapper与ValueInjecter [关闭]](http://www.mshxw.com/aiimages/31/506783.png)
