Перегрузка AutoMapper MapperConfiguration(config => c.AddMaps(assembly)) не регистрирует закрытые общие картыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Перегрузка AutoMapper MapperConfiguration(config => c.AddMaps(assembly)) не регистрирует закрытые общие карты

Сообщение Гость »


Я работаю над проектом .Net 8.0, основанным на шаблоне «Чистая архитектура» Джейсона Тейлора. В этом проекте AutoMapper используется повсюду для сопоставления между сущностями домена и объектами передачи данных (DTO). В проекте модульного тестирования приложения определены тесты для проверки определенных сопоставлений. Недавно я представил несколько DTO, которые используют дженерики для установки типа данных для свойства Id объекта поиска. После введения дженериков (и связанных с ними карт) мои тесты AutoMapper начали давать сбой, но только для дженериков и только там, где используется перегрузка AddMaps. Если карты добавляются явно с использованием перегрузки MapperConfiguration(config => c.CreateMap(src,dest), карты работают должным образом.
Полагая, что это AutoMapper ошибка, я открыл проблему в репозитории AutoMapper, но вместо этого меня направили сюда.
Я создал скрипт .NET, демонстрирующий проблему в браузере, и полный код воспроизведения приведен ниже. есть недосмотр конфигурации, ограничение функций или это ошибка AutoMapper?

Код: Выделить всё

public class MyClass
{
public int Id { get; set; }
public string Name { get; set; } = null!;
}

public record MyClassDto
{
public int Id { get; init; }
public string Name { get; init; } = null!;

private class Mapping : Profile
{
public Mapping() => CreateMap();
}
}

public record MyGenericClassDto
{
public T Id { get; init; } = default!;
public string Name { get; init; } = null!;

private class Mapping : Profile
{
public Mapping() => CreateMap();
}
}

public class MappingTests
{
[Test]
// Will succeed
[TestCase(typeof(MyClass), typeof(MyClassDto))]
// Will fail
[TestCase(typeof(MyClass), typeof(MyGenericClassDto))]
public void ShouldSupportMappingFromSourceToDestination_AddMaps(
Type source,
Type destination)
{
var instance = GetInstanceOf(source);
var configuration = new MapperConfiguration(config =>
config.AddMaps(Assembly.GetAssembly(typeof(MyClass))));
var mapper = configuration.CreateMapper();

mapper.Map(instance, source, destination);
}

[Test]
// Will succeed
[TestCase(typeof(MyClass), typeof(MyClassDto))]
// Will succeed
[TestCase(typeof(MyClass), typeof(MyGenericClassDto))]
public void ShouldSupportMappingFromSourceToDestination_CreateMap(
Type source,
Type destination)
{
var instance = GetInstanceOf(source);
var config = new MapperConfiguration(cfg =>
cfg.CreateMap(source, destination));
var mapper = new Mapper(config);

mapper.Map(instance, source, destination);
}

private static object GetInstanceOf(Type type) =>
type.GetConstructor(Type.EmptyTypes) != null
? Activator.CreateInstance(type)! :
// Type without parameterless constructor
RuntimeHelpers.GetUninitializedObject(type);
}


Источник: https://stackoverflow.com/questions/781 ... -not-regis
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»