1

私はAutoMapperを使用して、一連のビジネスオブジェクトを一連のWCFDTOにマップしています(または間もなく使用する予定です)。それはまともなトリックのように見えました-レベルで行うべきかなりの量のトラブルシューティングがありました.CreateMap、しかしそれは全体的にそれの価値があると感じました。アセンブリの外部からビジネスロジックを非表示にすることを決定するまで。

BOとマッパーは同じプロジェクトに住んでいます。それらは外部アセンブリDTOをスピンオフします。これはpublic(とにかくチャネルを通過する必要があります)。DTOがその仕事をするようになったので、BOを公開する必要はありません。そのため、アクセサーをにリセットすると思いましたinternal。Kaboomは自動マッピングになります。説明する:

(BLLからのコード、AutoMappingと同じ)

public class TestObject
{
    private int _myID;
    public int MyID
    {
        get { return _myID; }
        set { _myID = value; }
    }
}

(サービスレイヤーからのコード)

public class TestObjectDTO
{
    private int _myID;
    public int MyID
    {
        get { return _myID; }
        set { _myID = value; }
    }
}

これはうまくいくでしょう

Mapper.CreateMap<TestObject, TestObjectDTO>();

私がこれをするまで:

internal class TestObject
...

またはこれだけでも、TestObject

internal int MyID

誰かが私にこれを説明できますか?これを「バグ」と呼ぶことはやめますが、反射ベースのマッピングの目的全体、つまり、さまざまな目的のオブジェクトを流暢にスケーリングできるようにすることは、確かに矛盾しているようです。AMがマッピングを処理できず、アクセサーを制御できるのはなぜですか?

4

2 に答える 2

0

これは設計によるものです。いくつかのオプションは、それら (private、protected、internal など) で動作する独自のリゾルバーを使用するか、インターフェイスにマッピングして明示的なインターフェイス実装を使用することです。

両方のアプローチは、この以前の SO スレッドへの回答でカバーされています。

内部とマークされたプロパティで AutoMapper を使用するにはどうすればよいですか?

于 2012-05-27T18:50:20.210 に答える
-1

MSDNから

The internal keyword is an access modifier for types and type members. Internal types or members are accessible only within files in the same assembly

つまり、AutoMapper などの参照アセンブリは、内部としてマークされたものを見ることさえできません。リフレクション ベースのマッピングには、パブリック クラスと、パブリックの get / set プロパティが必要です。

于 2012-05-27T18:29:11.183 に答える