В настоящее время я переношу несколько профилей сопоставления с Automapper 4.2.1 на последнюю версию 9.0.0. Старые профили сопоставления строятся иерархически, где абстрактный базовый класс требует аргумента типа IDatetime
. Эта инъекция используется только для тестирования.
public abstract MappingProfileBase : Profile
{
protected MappingProfileBase(IDatetime datetime)
{
this.CreateMap<Foo, FooDto>()
.ForMember(dest => dest.SomeTimeStamp, opt => opt.MapFrom(src => datetime));
// Further mappings
}
}
public MappingProfileA : MappingProfileBase
{
public MappingProfileA(IDatetime datetime) : base(datetime)
{
this.CreateMap<FooDerived, FooDerivedDto>()
// Further and more specific mappings
}
}
Теперь я хотел бы перейти к новым методам Include
и IncludeBase<>
и отменить наследование MappingProfileA
и MappingProfileBase
, но просто не знаю, как быть с внедренным интерфейсом. Ни один из новых методов не принимает никаких аргументов.
Вот как я думаю, что это должно выглядеть так:
public class MappingProfileBase : Profile
{
public MappingProfileBase(IDatetime datetime)
{
this.CreateMap<Foo, FooDto>()
.ForMember(dest => dest.SomeTimeStamp, opt => opt.MapFrom(src => datetime));
// Further mappings
}
}
public class MappingProfileA : Profile
{
public MappingProfileA()
{
this.CreateMap<FooDerived, FooDerivedDto>();
.IncludeBase<Foo, FooDto>();
}
}
Итак, как я могу передать аргументы конструктору класса base? Какие еще возможности существуют?