6

私は、AutomapperをASP.NET MVCソリューションとUnity DIで使用する予定です。どのように使用するかについてautomapperに投稿されたビデオは非常に古いものであり、マッパーが依存性注入でどのように使用できるかを示していません。 stackoverflowのほとんどの例では、Mapper.CreateMap()メソッドも使用されていますが、現在は推奨されていません。AutomapperとUnity Dependency Injectionの併用方法は?

automapperガイドは、あなたのタイプを持っていたら、あなたは MapperConfigurationインスタンスとCreateMapを使用して2つのタイプのマップを作成することができます

を言います。通常はAppDomainごとに1つだけ MapperConfigurationインスタンスが必要で、起動時に がインスタンス化される必要があります。

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

ので、私はコードの行の上に想定していますと、CreateMapperメソッドを使用IMapperを作成し、マッピングを実行するにはGlobal.asaxの

のように、アプリケーションの起動になります。

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

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

+0

「IMapper」とマッパーインスタンスの間でマッピングするようにコンテナを設定する必要があります。次に、コンストラクタで 'IMapper'を受け入れることによって、コントローラから' IMapper'への依存関係を宣言する必要があります。 –

+0

どのような例ですか?マップする必要がある各エンティティに対して、新しいMapperConfiguration()が存在するのでしょうか?例は本当に助けになるだろう – LP13

答えて

11

まず、それから、このように構成されているすべてのあなたのタイプがあるIMapperMapperConfigurationを作成し、このような統一コンテナとマッパーのインスタンスを登録し、その後

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

    cfg.CreateMap<MyHappyEntity, MyHappyEntityDto>(); 

    //... 
}); 

IMapper mapper = config.CreateMapper(); 

を:

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フレームワークでコンテナを正しくセットアップすると、コントローラーは問題なく構築できるはずです。

関連する問題