1

使用しているマッパーがわからないまま、オブジェクトマッパーを構成しようとしています。:/

これは少し奇妙に聞こえるかもしれません。これは、Onionアーキテクチャを試しているため、UIがインフラストラクチャにあるオブジェクトマッパーを認識できないためです。例については、このソリューションを参照してください。

タマネギのアーキテクチャ

デフォルトなしのマッピング動作を「委任」する方法を理解するのに問題があります。のようなもの:

Mapper
    .CreateMap<MyModel, MyDestViewModel>()
    .ForMember(
        dest => dest.SomeDestinationProperty,
        opt => opt.MapFrom(src => src.SomeSourceProperty)
    );

Global.asaxから呼び出されるMVCプロジェクトにクラスを設定しました。ここで、マッピングを構成します。

public static class MapConfig
{
    public static void RegisterMaps()
    {

    }
}

こんなことができると思っていました。(IMapperは、ドメインにある自己定義のインターフェースです)

public static void RegisterMaps(HttpConfiguration config)
{
    var mapper = config.DependencyResolver.GetService(IMapper);
    mapper.CreateMap<MyModel, MyViewModel>();
}

さて....ForMemberのような特別な動作を設定するにはどうすればよいですか?AutoMapper固有にすることはできないことに注意してください。

私はこれらの線mapper.CreateMap<MyModel, MyViewModel>(Expression<Func<T>>)に沿って、Funcが今は理解できない黒魔術を行うことを考えていました:(-私は正しい道を進んでいますか、それとも重要な何かを逃したことがありますか?

4

2 に答える 2

11

Onion Architecture は、実装にとらわれない構成ではなく、実行に関するものです。

マッピングを実行するための IMapper インターフェイスを作成するだけで、構成について心配する必要はありません。これは、ORM、IoC コンテナー、およびその他すべてに適用されます。

また、Onion Architecture はプロジェクトの構造ではなく、依存関係の方向性に関するものです。UI で CreateMap を呼び出すだけです。その後、AutoMapper に委譲するバージョンを実装する他の部分を使用して、Core で IMapper インターフェイスを定義できます。

于 2013-03-07T10:02:39.997 に答える
3

便利な機能を抽象化しているため、最初に認識したよりも時間がかかります。マッパーを選択してそれに固執することに時間を費やしてみませんか?

UI がマッパーを認識しないことがなぜそれほど重要なのですか? MVC を使用していると仮定すると、選択したマッパー機能の多くを変更して、ドメイン モデルをフラット化してモデルを表示することになります。

プロジェクトの途中でORMを切り替えることにした場合に備えて、人々が汎用リポジトリ実装を使用するのと同じ種類のナンセンスです。

インフラストラクチャを慎重に選択し、それに固執してください。

于 2013-03-07T10:20:45.903 に答える