Как сопоставить два объекта, используя только их интерфейсы с Automapper? - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь отобразить два объекта, используя только их интерфейсы, но возвращаемое значение всегда является объектом с пустыми / нулевыми свойствами:

Доменный интерфейс:

public interface ICustomer
{
    int Age { get; }
    string Name { get; }
}

Интерфейс DAL:

public interface ICustomerEntity
{
    int Age { get; }
    string Name { get; }
}

Я пытаюсь сопоставить их с помощью следующего кода:

class Program
{
    static void Main(string[] args)
    {
        MapperConfig.RegisterMappings();

        ICustomer customer1 = new Customer("John", 30);
        ICustomer customer2 = new Customer("Mary", 30);

        var customerEntity = Mapper.Map<ICustomer, ICustomerEntity>(customer1);
        var customerReturned = Mapper.Map<ICustomer>(customerEntity);
    }
}

Вот мой файл конфигурации:

public class MapperConfig
{
    public static void RegisterMappings()
    {
        Mapper.Initialize(c =>
        {
            c.AddProfile<DomainToEntitiesMappingProfile>();
            c.AddProfile<EntitiesToDomainMappingProfile>();
        });
    }
}

И это моипрофили:

class DomainToEntitiesMappingProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<ICustomer, ICustomerEntity>()
            .Include<Customer, CustomerEntity>();
    }
}

class EntitiesToDomainMappingProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<ICustomerEntity, ICustomer>()
            .Include<CustomerEntity, Customer>();
    }
}

Когда я пытаюсь отобразить конкретные классы (удаляя интерфейсы), он работает просто отлично, но я не хочу связывать свои отображения с конкретными классами.

Как этого добиться?

Я пробовал такой же подход с AutoMapper 6, и он тоже не работал.

1 Ответ

0 голосов
/ 27 мая 2018

Проблема в том, что в вашем интерфейсе отсутствуют публичные сеттеры:

public interface ICustomer
{
    int Age { get; }
    string Name { get; }
}

Вам необходимо добавить их:

public interface ICustomer
{
    int Age { get; set; }
    string Name { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...