web-dev-qa-db-ja.com

ユニティ依存性注入でAutomapperを使用する方法は?

AutomapperをASP.NETMVCソリューションとUnityDIで使用することを計画しています。 automapper の使用方法に関するビデオは非常に古く、依存性注入でマッパーを使用する方法を示していません。 stackoverflowの例のほとんどは、現在非推奨となっているMapper.CreateMap()メソッドも使用しています。

オートマッパーガイドによると

タイプを取得したら、MapperConfigurationインスタンスとCreateMapを使用して2つのタイプのマップを作成できます。通常、AppDomainごとに1つのMapperConfigurationインスタンスのみが必要であり、起動時にインスタンス化する必要があります。

 var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());

したがって、上記のコード行は、global.asaxのようにアプリケーションの起動に入ると想定しています。

マッピングを実行するには、CreateMapperメソッドを使用してIMapperを作成します。

 var mapper = config.CreateMapper();
 OrderDto dto = mapper.Map<OrderDto>(order);

上記の行はコントローラーに入ります。しかし、このconfig変数がどこから来ているのかわかりませんか?コントローラにIMapperを注入するにはどうすればよいですか?

11
LP13

まず、MapperConfigurationを作成し、そこからすべてのタイプを次のように構成したIMapperを作成します。

var config = new MapperConfiguration(cfg =>
{
    //Create all maps here
    cfg.CreateMap<Order, OrderDto>();

    cfg.CreateMap<MyHappyEntity, MyHappyEntityDto>();

    //...
});

IMapper mapper = config.CreateMapper();

次に、マッパーインスタンスを次のようにUnityコンテナに登録します。

container.RegisterInstance(mapper);

次に、マッパーを使用するコントローラー(またはサービス)は、コンストラクターで次のようにそのような依存関係を宣言できます。

public class MyHappyController
{
    private readonly IMapper mapper;

    public MyHappyController(IMapper mapper)
    {
        this.mapper = mapper;
    }

    //Use the mapper field in your methods
}

MVCフレームワークを使用してコンテナーを正しくセットアップしたとすると、コントローラーは問題なく構築可能であるはずです。

21
Yacoub Massad