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を注入するにはどうすればよいですか?
まず、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フレームワークを使用してコンテナーを正しくセットアップしたとすると、コントローラーは問題なく構築可能であるはずです。