就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果你觉得这个问题可以改进并可能重新打开,visit the help center 寻求指导。




9年前关闭。










锁定。这个问题及其答案是 locked 因为这个问题是题外话但具有历史意义。它目前不接受新的答案或互动。








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

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

最佳答案

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

我真的不喜欢写太多或写很多 monkey code 像:

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

ValueInjecter 是 像带有插件的 mozilla, 你创建 ValueInjections 并使用它们

有用于展平、取消展平的内置注入(inject),以及一些旨在被继承的注入(inject)

并且它在 方式的方面类型 中更有效,您不必1对1指定所有属性,而是执行以下操作:

从源中获取名称以“Id”结尾的所有 int 属性,转换值并将每个属性设置为源对象中具有相同名称但没有 Id 后缀的属性,并且它的类型是从实体继承的,诸如此类

一个明显的区别,ValueInjecter 甚至在具有展平和反展平的窗口形式中也被使用,这就是它的灵活性

(从对象映射到表单控件并返回)

Automapper,不能在 windows 窗体中使用,没有 unflatenning,但它有很好的东西,比如集合映射,所以如果你需要 ValueInjecter,你只需执行以下操作:
foos.Select(o => new Bar().InjectFrom(o));
您还可以使用 ValueInjecter 从 匿名 动态 对象映射

差异:
  • 自动映射器为每个映射可能性创建配置 CreateMap()
  • valueinjecter 从任何对象注入(inject)到任何对象(也有从对象注入(inject)到值类型的情况)
  • automapper 已经扁平化构建了它,并且仅适用于简单类型或来自相同类型的,并且它没有 unflattening
  • valueinjecter 仅在您需要时才执行 target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection>如果你想从 Foo.Bar.Name of type StringFooBarName of type Class1 你继承 FlatLoopValueInjection 并指定这个
  • 默认情况下自动映射器映射具有相同名称的属性,其余的您必须一一指定,并执行 Prop1.Ignore()、Prop2.Ignore() 等操作。
  • valueinjecter 有一个默认注入(inject) .InjectFrom() ,它执行具有相同名称和类型的属性;对于其他所有内容,您可以使用单独的映射逻辑/规则创建自定义值注入(inject),更像是方面,例如从 Foo 类型的所有 Prop 到 Bar
  • 类型的所有 Prop

    关于c# - AutoMapper 与 ValueInjecter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4663577/

    10-13 06:20