Automapper Map Property как коллекция - PullRequest
0 голосов
/ 30 января 2012

Мне нужно сопоставить ICustomerAddresses с моим собственным пользовательским объектом Адрес или Список <Адрес> . Как я могу использовать automapper, чтобы указать, что свойство Customer.ICustomerAddresses сопоставляется с моим пользовательским адресом?

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

public interface ICustomer
{
    ICustomerAddresses Addresses;
}

В этом случае ICustomerAddresses - это коллекция ICustomerAddress. Однако ICustomerAddress - это не простой IEnumerable, он содержит свойства, содержащие коллекцию, например:

public interface ICustomerAddresses : IBusinessObjectCollection
  {
    ICustomerAddress this[int nIndex] { get; }

    ICustomerAddress CreateNew();

    ICustomerAddress AddNew();

  }

Automapper не может самостоятельно определить, что ICustomerAddresses на самом деле является просто набором ICustomerAddress , так как мне сказать, что это так?

Заранее спасибо!

1 Ответ

0 голосов
/ 02 февраля 2012

Конвертер пользовательских типов должен работать нормально.Вот быстрый пример (скомбинировано - не проверено).Кроме того, я добавил свойство "Length" в ICustomerAddresses, чтобы знать, сколько циклов пройти:

public class AddressConverter : TypeConverter<ICustomerAddresses, IList<Address>>
{
    protected override IList<Address> ConvertCore(ICustomerAddresses source)
    {
        var addresses = new List<Address>();
        for (var i = 0; i < source.Length; i++)
        {
            var addr = source[i];
            addresses.Add(new Address
                            {
                                Addr1 = addr.Addr1, 
                                Zip = addr.Zip
                            });
        }

        return addresses;
    }
}

И вы, вероятно, могли бы использовать Automapper внутри цикла, чтобы преобразовать ICustomerAddress вAddress вместо того, чтобы делать это вручную, как я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...