私はAutoMapperをDependency Injectionで簡単に使用しようとしています。 15のプロパティを持つSourceクラスとDestinationクラスがあるとします。いくつかのプロパティのマッピングを行うと、私はDependencyInjectionを使ってサービスを使いたいと思う。 ネットで見たすべての例では、コンストラクターDIを実行できるValueResolver(またはクラス全体でのTypeResolver)の使用について説明しています。AutoMapper DependencyInjectionを簡単に作成
スニペットは、次のようになります(使用してAutoMapper 3.3.1構文が、概念がまだ残っている):
public class SourceMapping : Profile
{
protected override void Configure()
{
CreateMap<Source, Destination>().ForMember(x => x.Value, opt => opt.ResolveUsing<ValueResolver>());
}
class ValueResolver : IValueResolver
{
private IValueSupplier _valueSupplier;
public ValueResolver(IValueSupplier valueSupplier)
{
_valueSupplier = valueSupplier;
}
public ResolutionResult Resolve(ResolutionResult source)
{
Source src = (Source) source.Value;
return source.New(_valueSupplier.Value * src.MyValue);
}
}
}
このアプローチは、それぞれDIが必要なすべてのプロパティのリゾルバ・クラスを作成するために私を強制します。
私は何か不足しているかもしれませんが、私はDIプロバイダを使ってインタフェースの実装を提供するために、AutoMapperにLambda表現マッピングを入力する方法を見つけることができません。
だから私はこのような気にいらたいと思います:
protected override void Configure()
{
CreateMap<Source, Destination>().ForMember(x => x.Value, opt => opt.MapFrom(src => opt.GetInstance<IValueSupplier>().Value * src.MyValue));
}