Я пытаюсь использовать Automapper с конфигурацией Dependency Injection для n-слойного приложения.
public class ApplicationMapping : Profile
{
public ApplicationMapping()
{
RegisterMappings();
Mapper.AssertConfigurationIsValid();
}
private void RegisterMappings()
{
CreateMap<IEnumerable<App>, ListAppsDto>()
.ForMember(dest => dest.Apps,
opt => opt.MapFrom(src =>
Mapper.Map<IEnumerable<App>, List<App>>(src.ToList())
)
);
}
}
Этот класс находится внутри моей Application
dll, где я размещаю свои сервисы и DTO.Также в этой dll у меня есть метод расширения для регистрации отображения:
public static class MappingServiceExtension
{
public static void AddApplicationMappings(this IServiceCollection services)
{
var mapperConfig = new MapperConfiguration(config =>
{
config.AddProfile<ApplicationMapping>();
});
IMapper mapper = mapperConfig.CreateMapper();
services.AddSingleton(mapper);
}
}
Затем в моем проекте WebAPI в классе Startup.cs
я поставил:
services.AddApplicationMappings();
И яиспользуйте его обычно с DI в моих службах:
public class AppService : IAppService
{
private readonly IAppRepository _appRepository;
private readonly IMapper _mapper;
public TruckService(IAppRepository appRepository, IMapper mapper)
{
_appRepository = appRepository;
_mapper = mapper;
}
}
Я бы хотел использовать вот так.Но я получаю исключение при запуске строки Mapper.AssertConfigurationIsValid();
, говоря, что:
'Mapper не инициализирован.Вызовите Initialize с соответствующей конфигурацией.Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет вызовов статических методов Mapper.Map, и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий IConfigurationProvider.экземпляр. '
Что мне здесь не хватает?Кажется, проблема в строке кода Mapper.Map<IEnumerable<App>, List<App>>(src.ToList())
.
Но как я могу получить экземпляр Mapper
там без использования статического Mapper
?