Профили Automapper не загружаются в автозагрузке?
Я использую:
- AutoMapper 6.1.1
- AutoMapper.Extensions.Microsoft.DependencyInjection 3.0.1
Похоже, мои профили не загружаются, каждый 9X_c#.net раз, когда я вызываю mapper.map, я получаю 9X_c#-language AutoMapper.AutoMapperMappingException: «Отсутствует конфигурация карты типов или неподдерживаемое сопоставление».
Здесь мой метод ConfigureServices класса 9X_asp.net-core-2.0 Startup.cs
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//register automapper
services.AddAutoMapper();
.
.
}
В другом проекте под названием 9X_automapper xxxMappings у меня есть профили отображения. Пример 9X_.cs-file класса
public class StatusMappingProfile : Profile
{
public StatusMappingProfile()
{
CreateMap()
.ForMember(t => t.Id, s => s.MapFrom(d => d.Id))
.ForMember(t => t.Title, s => s.MapFrom(d => d.Name))
.ForMember(t => t.Color, s => s.MapFrom(d => d.Color));
}
public override string ProfileName
{
get { return this.GetType().Name; }
}
}
И вызовите карту таким образом в классе 9X_.cs-file обслуживания
public StatusDTO GetById(int statusId)
{
var status = statusRepository.GetById(statusId);
return mapper.Map(status); //map exception here
}
status имеет значения после 9X_csharp вызова statusRepository.GetById
Для моих 9X_.cs-file классов профиля, если вместо наследования 9X_automapper от профиля я наследую от MapperConfigurationExpression, я 9X_c-sharp получил модульный тест, подобный приведенному 9X_c-sharp ниже, в котором говорится, что сопоставление 9X_c# хорошее.
[Fact]
public void TestStatusMapping()
{
var mappingProfile = new StatusMappingProfile();
var config = new MapperConfiguration(mappingProfile);
var mapper = new AutoMapper.Mapper(config);
(mapper as IMapper).ConfigurationProvider.AssertConfigurationIsValid();
}
Я предполагаю, что мои сопоставления 9X_c# не инициализируются. Как я могу это проверить? Я 9X_asp.net-core-2.0 что-то упускаю? Я видел перегрузку метода 9X_c#-language AddAutoMapper()
services.AddAutoMapper(params Assembly[] assemblies)
Следует ли передавать все 9X_asp.net-core-2.0 сборки в моем проекте xxxMappings. Как я 9X_automapper могу это сделать?
Ответ #1
Ответ на вопрос: Профили Automapper не загружаются в автозагрузке?
Разобрался. Поскольку мои сопоставления 9X_csharp находятся в другом проекте, я сделал две 9X_c# вещи
- Из моего проекта API (где находится Startup.cs, добавлена ссылка на мой проект xxxMapprings)
-
в ConfigureServices я использовал перегрузку 9X_asp.net-core-2.0 AddAutoMapper, которая получает сборку:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); //register automapper services.AddAutoMapper(Assembly.GetAssembly(typeof(StatusMappingProfile))); //If you have other mapping profiles defined, that profiles will be loaded too.
Ответ #2
Ответ на вопрос: Профили Automapper не загружаются в автозагрузке?
Еще одно решение для устранения проблемы, когда 9X_csharp у нас есть сопоставление профилей в разных 9X_c-sharp проектах в решении:
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
-
1
-
11
-
7
-
2
-
6
-
2
-
4
-
3
-
2
-
2
-
1
-
3
-
3
-
5
-
1
-
8
-
6
-
1
-
5
-
6
-
2
-
6
-
3
-
3
-
4
-
3
-
3
-
2
-
1
-
2
-
3
-
1
-
2
-
9
-
5
-
1
-
1
-
3
-
3
-
1
-
2
-
3
-
3
-
2
-
1
-
5
-
2
-
2
-
3
-
4