<分区>
每次我都在寻找AutoMapper StackOverflow 上的东西,我正在阅读有关 ValueInjecter 的内容.
谁能告诉我它们之间的优缺点(性能、特性、API 使用、可扩展性、测试)?
<分区>
每次我都在寻找AutoMapper StackOverflow 上的东西,我正在阅读有关 ValueInjecter 的内容.
谁能告诉我它们之间的优缺点(性能、特性、API 使用、可扩展性、测试)?
最佳答案
作为 ValueInjecter 的创造者, 我可以告诉你我这样做是因为我想要一些简单且非常灵活
我真的不喜欢写太多或写很多 monkey code
喜欢:
Prop1.Ignore, Prop2.Ignore etc.
CreateMap<Foo,Bar>(); CreateMap<Tomato, Potato>(); etc.
ValueInjecter 是类似 mozilla 的插件,您可以创建 ValueInjections 并使用它们
有内置的扁平化、反扁平化注入(inject),还有一些是为了继承
而且它在方面类型的方式中更有效,您不必一对一地指定所有属性,而是执行如下操作:
从名称以“Id”结尾的源中获取所有 int 属性,转换值并将每个属性设置为源对象中具有相同名称但没有 Id 后缀的属性,并且它的类型是从实体继承的,东西像那样
所以一个明显的区别,ValueInjecter 甚至在具有扁平化和非扁平化的窗口窗体中使用,这就是它的灵 active
(从对象映射到表单控件并返回)
Automapper,不能在 Windows 窗体中使用,不能展开,但它有像集合映射这样的好东西,所以如果你需要它和 ValueInjecter,你只需要做这样的事情:
foos.Select(o => new Bar().InjectFrom(o));
您还可以使用 ValueInjecter 从匿名和动态对象进行映射
差异:
自动映射器为每个映射可能性创建配置 CreateMap()
valueinjecter 从任何对象注入(inject)到任何对象(也有从对象注入(inject)到值类型的情况)
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 有一个默认注入(inject) .InjectFrom() ,它执行具有相同名称和类型的属性;对于其他一切,您使用单独的映射逻辑/规则创建自定义值注入(inject),更像是方面,例如从 Foo 类型的所有属性到 Bar 类型的所有属性
关于c# - AutoMapper 与 ValueInjecter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663577/