c# - AutoMapper 与 ValueInjecter

标签 c# .net automapper valueinjecter object-object-mapping

<分区>

每次我都在寻找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 StringFooBarName 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/

相关文章:

C# 克隆包括 Lambda 表达式

c# - 根据声明的类筛选由 TypeDescriptor.GetProperties() 返回的属性

c# - 如何确定 C# 中字符的代码页 850 中的索引?

c# - 如果 'SubmitChanges' 失败但需要其他提交,如何回滚 DBContext 中的数据更改?

c# - 哪一层应该包含 AutoMapper 配置?

c# - Automapper - 在不创建具体类的情况下映射到接口(interface)类型属性

c# - 使用 FrontPage RPC 上传到 Sharepoint

c# - 在代码隐藏中向 GridView 添加 CSS

c# - 在 Automapper 中使用 Profiles 来映射具有不同逻辑的相同类型

c# - 为什么我的 Azure Function App 时间戳少了一个小时