私は通常ここでこの種の質問をしませんが、残念ながら AutoMapper は良いマッピングライブラリのようですが、そのドキュメントはひどく悪いです-ライブラリのメソッドのXMLドキュメントはありません。私が見つけた最も公式のオンラインドキュメントは this で、これは非常に活発です。誰かがより良いドキュメントを持っているなら、私に知らせてください。
そうは言っても、ここに質問があります:なぜMapper.Initialize
を使用するのですか? Mapper.CreateMap
をすぐに使用できるため、必須ではないようです。また、ドキュメントがないため、Initialize
が何を意味するのかわかりません。
AutoMapperユーザーリストで質問したところ、この回答は基本的に次の理由を示しています。
https://groups.google.com/forum/?fromgroups=#!topic/automapper-users/0RgIjrKi28
これは、AutoMapperが決定論的(確率的)最適化を実行できるようにすることと関係があります。パフォーマンス面では、すべてのマッピングをInitialize
呼び出しで作成することをお勧めします。
初期化はすべてのマップ作成を一度実行するので、マッピングを行うときに実行されます。いつでもマップを作成できますが、マッピングの作成にはリフレクションが含まれるため、コードの速度が低下します。
マッピングコードにプロファイルを使用し、次のようなものを使用してこれをすべてセットアップするのが最善だと思います。
public class AutoMapperConfiguration : IRequiresConfigurationOnStartUp
{
private readonly IContainer _container;
public AutoMapperConfiguration(IContainer container)
{
_container = container;
}
public void Configure()
{
Mapper.Initialize(x => GetAutoMapperConfiguration(Mapper.Configuration));
}
private void GetAutoMapperConfiguration(IConfiguration configuration)
{
var profiles = GetProfiles();
foreach (var profile in profiles)
{
configuration.AddProfile(_container.GetInstance(profile) as Profile);
}
}
private static IEnumerable<Type> GetProfiles()
{
return typeof(AutoMapperConfiguration).Assembly.GetTypes()
.Where(type => !type.IsAbstract && typeof(Profile).IsAssignableFrom(type));
}
}