私たちは、ASP.NET Core 2.0でautomapperを使用します。Automapperのコンパイルマッピング
各マッパーから使用されるマッピング設定を一度作成するのが好きです。私たちは、automapperがスレッドセーフではないと一度読んだので、私たちは問題がないと要求ごとにマッパーを作成します。
我々は((コードMapperConfigruation.CompileMappingsに参照してください)アプリケーションの起動時にmappingconfigurationをプリコンパイルしたい。
私はマッピングにかかる時間の時間を測定した場合、私は最初のマッピングは、他のより多くの時間を必要としていることがわかり。マッピング私はバグを持っている理由があるのか、やる
コードスタートアップクラスのConfigureServiceで
:?
services.AddSingleton<MyMapperConfiguration>();
services.AddScoped<IObjectMapper, MyMapper>();
Mapperconfiguration
public class MyMapperConfiguration
{
public MapperConfiguration MapperConfiguration { get; private set; }
public MappingDefinition MappingDefinition { get; }
public MapperConfiguration(IOptions<MappingDefinition> mappings)
{
// MappingDefinitions hold some information where to search mappings
MappingDefinition = mappings.Value;
}
public void Configure()
{
List<Type> mappingDefinitionClasses = new List<Type>();
// Search Types with special attribute and add it to the typelist
MapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.AddProfiles(mappingDefinitionClasses.ToArray());
});
MapperConfiguration.CompileMappings(); // <-- THIS SHOULD COMPILE THE MAPPING I THNIK?!
}
`
マッパー
public class MyMapper : IObjectMapper
{
public IMapper Mapper { get; }
public Mapper(MapperConfiguration mappingConfiguration)
{
Mapper = mappingConfiguration.MapperConfiguration.CreateMapper();
}
public TDestination Map<TSource, TDestination>(TSource source)
{
return Mapper.Map<TSource, TDestination>(source);
}
}
IObjectMapper:スタートアップのConfigruateのMethodeのでWEBAPI
Stopwatch sw = new Stopwatch();
sw.Start();
destObj = _mapper.Map<Source, Destination>(sourceObj);
sw.Stop();
Debug.WriteLine($"Duration of mapping: {sw.ElapsedMilliseconds}");
内部
public interface IObjectMapper
{
TDestination Map<TSource, TDestination>(TSource source);
}
測定時間Iはまた、)(マッピング設定のインスタンスを取得し、設定を呼び出しますこのインスタンスが生き残ること。
AutoMapper用のASP.NETコアの拡張パッケージ(https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection)を参照すると、この設定が非常に簡単になります。 –
オートマトンに直接依存することは望ましくありません。マッパーの実装を交換する必要があります – Tester
何ですか?どうして?それはあまり効果のない仕事のすばらしさでしょう。マッパーの実装を変更したい場合は、抽象化せず、単に正規表現を学んでください。 –