2011-09-09 14 views
0

異なる/同じタイプの異なるオブジェクト間でプロパティを複製してコピーする単純なマッパークラスを作成しています。ビットマップへのオブジェクトマッピング

マッピングはリフレクションによって実行され、値の型、リスト、および参照の型でうまく機能します。 AnotherTypeはクラス型である

class SimpleValueTypes 
{ 
    public string Name { get; set; } 
    public int Number { get; set; } 
    public long LongNumber { get; set; } 
    public float FloatNumber { get; set; } 
    public bool BooleanValue { get; set; } 
    public AnotherType AnotherProperty{ get; set; } 

}

すべてがこのようなタイプのために動作します。すべてのプロパティはかなり先にこのようにマッピングされるまで、参照型のマッピングは、再帰的な特性を検査することによって行われる。mapFormとmapToがPropertyInfoオブジェクトである

object value = mapFrom.GetValue(input, null);     
mapTo.SetValue(output, value, null); 

「ビットマップ」プロパティを持つ新しいタイプが到着し、オブジェクトの全体のクラスが同じように扱うことができないことに気付きました。

Class NewType 
{ 
    public Bitmap Bitmap{get;set;} 
    public string Name{get;set;} 
} 

このような場合はどうすればよいですか?明らかにプロパティをコピーしても、オリジナルのBitmapオブジェクトの新しいコピーが作成されるわけではありません。

PS

私はマッパーまたは他の外部のパッケージを発する/ automapper使用することはできません。

+0

なぜAutomapperを使用できないのですか? – Tigran

+0

これはこのプロジェクトのポリシーです – mhttk

答えて

1

あなたには、いくつかの既存のものを使用しマッパーを実装していない場合:私は、これは常にあなたの側で働いていたと思います

、それは(良いニュースである)あなたのプロジェクトの場合のみです。問題は、私がカスタムマッパーを実装する必要がある場所に到着したことです。そこで基本的な機能をマッピングしたBaseMapperのような基底クラスを定義し、型オブジェクトのマッピングを扱うBitmapMapper:BaseMapperクラスから派生させます。

しばらくすると、マップの具体的な実装でMyTypeMapper : BaseMapperを作成します。

これはちょうど基本的なアイデアです。具体的なプロジェクトのための最も適切な方法を見つけるためにこれを考えなければなりません。

独自のマッパーを使用すると、あなたのために必須ではない場合は、例えばAutomapper

よろしくような市場で入手可能ないくつかの既存のソリューションを使用することができます。

+0

これは私があまりにも傾いていたものです。このライブラリでは外部ライブラリを使用できません。 – mhttk

+0

オーバーライドされたコンクリートマッパーの実装を実行する独自の抽象的なSetMapプロパティを使用できます。 – Tigran

+0

はい、私はこれについてgoigと思っています。今すぐ戦略パターンに続くマッピング・メカニズムを実装する。このようにして、私は戦略リポジトリであらゆるマッピングを調べます。また、私はそれをかなり簡単に拡張することができます。 – mhttk

1

オブジェクトがICLoneableであれば、それを利用することができます。オブジェクトがICLoneableであるかどうかを簡単に確認し、実装に依存することができます。 ICloneableでないオブジェクトについては、this threadが役立つかもしれません。

Gert-Jan

+0

私はICloneableアプローチ(イメージはそれを実装していて、間違いなく動作するでしょう)が好きであり、あなたが言ったスレッドが大きな助けになっています。私は隠れるかもしれない問題(クローン化/ディープクローン化など)のためにICloneableに頼ることに熱心ではありません。とにかく+1 – mhttk

関連する問題