每次我在StackOverflow上寻找AutoMapper的东西时,我都会读到一些关于ValueInjecter的东西。
谁能告诉我它们之间的优缺点(性能、功能、API使用、可扩展性、测试)?
发布于 2011-01-13 04:38:07
作为ValueInjecter的创建者,我可以告诉您,我之所以这样做,是因为我想要一些简单灵活的
我真的不喜欢写太多或者写很多像这样的monkey code:
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()
target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection>,如果您希望从Foo.Bar.Name of type String到FooBarName of type Class1,则默认情况下继承FlatLoopValueInjection并以相同的名称指定Prop1.Ignore()属性,对于其余的映射,您必须逐个指定,并执行类似Prop1.Ignore()的操作。Prop2.Ignore() etc.
的所有道具
发布于 2011-03-30 10:10:03
由于我从未使用过任何其他工具,因此我只能谈一谈AutoMapper。我对构建AutoMapper有几个目标:
如果你想做这些事情,AutoMapper非常适合你。AutoMapper做得不好的地方有:
填充现有objects
的
原因是我从来不需要做这些事情。在大多数情况下,我们的实体没有setter,不公开集合等,这就是它不存在的原因。我们使用AutoMapper来扁平化到DTO,并从UI模型映射到命令消息等等。这就是它对我们非常非常好的地方。
发布于 2011-01-13 05:07:04
我都试过了,而且更喜欢ValueInjecter,因为它太简单了:
myObject.InjectFrom(otherObject);对于我的绝大多数注入需求,这就是我要知道的全部。它不可能比这更简单和优雅了。
https://stackoverflow.com/questions/4663577
复制相似问题