就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果你觉得这个问题可以改进并可能重新打开,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 从 匿名 和 动态 对象映射
差异:
target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection>
如果你想从 Foo.Bar.Name of type String
到 FooBarName of type Class1
你继承 FlatLoopValueInjection 并指定这个 关于c# - AutoMapper 与 ValueInjecter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4663577/