Everytime I'm looking for AutoMapper stuff on StackOverflow, I'm reading something about ValueInjecter.
それらの長所と短所(パフォーマンス、機能、API の使用、拡張性、テスト)を教えていただけますか?
ベストアンサー1
の創始者としてバリューインジェクター、私は何かが欲しかったからそれをやったとあなたに言えるシンプルで非常に柔軟
私はあまり書くことや、次のようなことをたくさん書くことはあまり好きではありませんmonkey code
:
Prop1.Ignore, Prop2.Ignore etc.
CreateMap<Foo,Bar>(); CreateMap<Tomato, Potato>(); etc.
ValueInjecterはMozillaのプラグインのように、ValueInjectionsを作成して使用する
フラット化、非フラット化、および継承を目的とした組み込みのインジェクションがあります。
そしてそれは方法の側面の種類すべてのプロパティを 1 対 1 で指定する必要はなく、代わりに次のようにします。
名前が「Id」で終わるソースからすべての int プロパティを取得し、値を変換して、それぞれを Id サフィックスのない同じ名前のソース オブジェクトのプロパティに設定します。そのタイプは Entity から継承されます。
明らかな違いの1つは、ValueInjecterはフラット化と非フラット化が可能なWindowsフォームでも使用されることです。それほど柔軟性が高いのです。
(オブジェクトからフォーム コントロールへのマッピングとその逆)
Automapper は、Windows フォームでは使用できません。また、アンフラット化もできません。ただし、コレクション マッピングなどの優れた機能を備えているため、ValueInjecter で必要な場合は、次のようにします。
foos.Select(o => new Bar().InjectFrom(o));
ValueInjecterを使用してマッピングすることもできます匿名そして動的オブジェクト
違い:
オートマッパーは各マッピングの可能性に対して構成を作成します CreateMap()
valueinjecter は任意のオブジェクトから任意のオブジェクトに注入します (オブジェクトから valuetype に注入する場合もあります)
オートマッパーにはフラット化機能が組み込まれており、単純なタイプまたは同じタイプに対してのみ機能し、アンフラット化機能はありません。
valueinjecterは必要な場合にのみ使用し
target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection>
、からにしたい場合はFoo.Bar.Name of type String
FlatLoopValueInjectionFooBarName of type Class1
を継承してこれを指定します。automapper はデフォルトで同じ名前のプロパティをマップし、残りのプロパティについては 1 つずつ指定し、Prop1.Ignore()、Prop2.Ignore() などの操作を行う必要があります。
valueinjecterには、同じ名前と型のプロパティを実行するデフォルトの注入.InjectFrom()があります。他のすべてについては、個別のマッピングロジック/ルール(アスペクトのようなもの)を使用してカスタムvalueinjectionsを作成します。例:Foo 型のすべてのプロパティから Bar 型のすべてのプロパティへ