1

VS2012 で AutoMapper を使用しています。私が使用する autoMapper メソッドのシグネチャは次のとおりです。

         public static IMappingExpression<TSource, TDestination> CreateMap<TSource, TDestination>();

パラメータとして 2 つの型を受け入れ、型 #1 を型 #2 にマッピングし、型 #2 を返します。すべて同じソースから継承するクラスがたくさんあります。AutoMap インスタンスを作成しようとすると、次のことを行う必要があります。

            Mapper.CreateMap<ClassOne, ClassTwo>();  
            ClassOne one = new ClassOne{Name="One};
            ClassTwo two = Mapper.Map<ClassOne, ClassTwo>(one);

これにより、ClassOne オブジェクトのすべてのフィールドが ClassTwo オブジェクトに「マップ」されます (はい、ClassTwo には ClassOne のフィールドがいくつかあります)。Mapper 関数を呼び出して 1 つのオブジェクトを別のオブジェクトにマップする 1 つの関数をセットアップしたいのですが、同じコードで 2 つのオブジェクトの im マッピングのみを変更する多数の関数ではありません。オブジェクトで GetType() を実行し、必要な型を文字列形式で取得できます。

         ClassOne one = new ClassOne();
         Type t = one.GetType();
         var type = t.FullName; //type is now "Generic.Collection.ClassOne"
         Mapper.CreateMap<type, ClassTwo>();//this will not compile
         Mapper.CreateMap<one.GetType(), ClassTwo>();//neither will this

しかし、マッパー関数に文字列を渡すことはできません。型を動的に宣言するにはどうすればよいですか?

型を宣言して使用する方法の例として AutoMapper を使用しています。私は同じことをする他の機能を持っています。だから私の質問は、動的に型を宣言するにはどうすればよいですか? - AutoMapper の使用方法ではありません。

4

2 に答える 2

3

CreateMap メソッドには、別の非ジェネリック オーバーロードがあります。

Mapper.CreateMap(t, typeof(ClassTwo));
于 2013-11-07T22:01:45.417 に答える