問題タブ [emitmapper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emitmapper - EmitMapper (階層にフラット化)
単純な命名規則に基づいて、フラット化されたオブジェクトから階層オブジェクトにマップしたいと考えています。例えば:
簡単な命名規則は、FlattenedObject 内の 2 つの下線です。
EmitMapper を使用してこれを達成するにはどうすればよいですか?
c# - カスタム マッピングを使用して複数の複雑なオブジェクトを平坦化する Automapper
そのため、通常の DTO からビジネスへのマッパー以外に何かがあり、最小限のマッピング コードでそれらをマッピングしようとしています。
設定
マッパー構成
これを行うとスローされます
エラー: AutoMapper.AutoMapperConfigurationException: メンバーのカスタム構成は、型の最上位の個々のメンバーに対してのみサポートされています。
また、 を取りAnotherClass.Tokens
、SomeClass.Tokens
に追加する必要がありTarget.Tokens
ます。
使用できることはわかっています.ConvertUsing
が、すべてのプロパティのマッピングを定義する必要があり、プロパティを一致させるための規則ベースのマッピングの利点が失われます。
.ConvertUsing
これを達成する他の方法はありますか(またはすべてのプロパティを手動でマッピングする以外に)?
Automapper経由でない場合、 EmitMapper経由で実行できますか? Tokens リストへの追加は、おそらく EmitMapper のPostProcessing
.
アップデート
少しハッキングした後、方法を見つけました:
注:一致Name.ToLowerInvariant()
できるようにするためにAccountID
->AccountId
などを行います。
使用法
IMappingExpression
この多くを使用してクリーンアップできる可能性があるという点で、他のプロパティをいくつか見つけました。見つけ次第更新します。
c# - エミットがリフレクションより速い理由
私はエミットとそれがリフレクションよりもはるかに高速であることについて多くのことを読んできましたが、その理由を見つけることができませんでした. エミットが IL コードを注入していることは理解していますが、ORM のようにプロパティ マッピングを行う場合、これがリフレクションよりも速いのはなぜですか?
この種の使用例を参照してください: エミット マッパーと valueinjecter または automapper のパフォーマンス
emitmapper - エミットマッパーに継承を認識させる
クラスの最も派生したマッピングを選択できるように、オブジェクトの階層をemitmapperに認識させようとしています。これらのクラスがあるとしましょう
そして、それぞれの DTO (PaymentDTO、GuarantePaymentDTO など) と、マップしたいオブジェクトには Payment のコレクションがあり、それぞれが Payment 自体を含む Payment から派生した任意のタイプであり、ターゲットはそのオブジェクトの DTO であり、もちろんPaymentDTOのコレクション。何も構成しない場合、emitmapper は常に基本型を作成してマップします。最も派生した型を認識させる最善の方法は何ですか?
c# - EmitMapper - 抽象モデル オブジェクトから抽象 DTO への一般的なマッピング
ValueInjecterからEmitMapperへの移行に助けが必要です(パフォーマンス上の理由からそうすることにしました)。私の使用例は、最も一般的なものの 1 つです。いくつかのルールに基づいて、モデル オブジェクトを DTO にマッピングします。
この規則の 1 つは、プロパティの型が DomainObject のサブクラスである場合、対応する DTO にマップする必要があるということです。具象型は問題ありませんが、抽象型でも機能するようにしたいと考えています。問題は、どの DTO を動的に使用する必要があるかを EmitMapper に伝える方法がわからないことです。
ValueInjecter コード内:
私の DTO はすべてインターフェイスを実装しているので、DTO<>
EmitMapper のメソッドを使用できると思っていましたが、方法がわかりDefaultMapConfig.ConvertGeneric
ません。
完全を期すために、現在の(機能していない)コードを含めます。
テストでこのマッピングを使用しようとすると、次の例外が発生します
編集:これは、マップしたいオブジェクトの例です。
c# - IList を使用した EmitMapper と ValueInjecter
AutoMapper、FasMapper、ValueInjecter、およびEmitMapperのパフォーマンス テストを実行していますが、型のリストをマップしようとすると、 EmitMapperとValueInjecterでのみ問題に直面していますIList<T>
それは私がすべてのマッパーに使用するコードです:
それはEmitMapperの私のアダプター実装です:
それはValueInjecterのためです:
メソッドを保持する単一のインターフェースがありますAdapt<TSource, TTarget>(TSource source)
私は何を間違っていますか?AutoMapperとFastMapper でも動作します! 変更するList<T>
と、すべてのマッパーで機能します。