1

実行時に構成したいので、ジェネリックを使用せずに AutoMapper を構成しようとしています。

SubstiteNulls メソッドを構成して、次と同等のことを実行できるようにしたい:

Mapper.CreateMap<Source, Dest>()
    .ForMember(dest => dest.Value, opt => opt.NullSubstitute("Other Value"));

しかし、これを行う方法がわかりません。それらの Type オブジェクトをCreateMapファクトリ メソッドに渡すことができますが、ForMemberメソッドを使用すると、optオブジェクトにはメソッドが含まれませんNullSubstitute。これは、ここで使用しているジェネリックがないためだと思います。

どうすればこれを達成できるかについてのアイデアはありますか?

アップデート

これらは私が得ているオプションです:

ここに画像の説明を入力

4

1 に答える 1

3

現在、非汎用バージョンの を使用しているときに使用されるインターフェイスでは、NullSubstitute設定を使用できません。IMappingExpressionCreateMap

Automapper がこのメソッドを に持つことを妨げる制限はないIMappingExpressionため、現在これはサポートされていません。

次の 3 つのオプションがあります。

  • Github で問題を作成し、実装されるまで待ちます
  • プロジェクトをフォークして、メソッドを自分で実装します。例として汎用バージョンを使用するのは非常に簡単です。
  • または、迅速だが非常に汚いソリューションが必要な場合。リフレクションを使用すると、構成から下敷きを取得し、そのメソッドPropertyMapを呼び出すことができます。SetNullSubstitute

    Mapper.CreateMap(typeof(Source), typeof(Dest))
        .ForMember("Value", opt =>
            {
                FieldInfo fieldInfo = opt.GetType().GetField("_propertyMap",
                    BindingFlags.Instance | BindingFlags.NonPublic);
                var propertyMap = (PropertyMap) fieldInfo.GetValue(opt);
                propertyMap.SetNullSubstitute("Null Value");
        });
    
于 2013-09-02T15:39:11.650 に答える