Карта объявленного типа AutoMapper - PullRequest
1 голос
/ 18 января 2011

Я бы хотел использовать AutoMapper для реализации отображения «объявленного типа» (обычно - то есть я не хочу вручную настраивать это для каждого типа)

Итак, если у меня есть:

public class Animal 
{ 
   int NumberOfLegs { get; set; }
}

public class Cat : Animal
{ 
   string FurColor { get; set; }
}

И у меня есть экземпляр Cat, который я хочу сопоставить с Animal ... Я хочу закончить экземпляром Animal, а не Cat.Я хочу, чтобы та же семантика применялась и к остальной части графа объектов (со связанными сущностями и коллекциями сущностей).

Кошки и собаки в стороне ... в основном, у меня есть подклассы DataContracts (которые не являютсяСамих DataContracts), которые я хочу вернуть в экземпляры DataContracts.

Есть предложения о том, как это сделать?

Спасибо!

1 Ответ

1 голос
/ 21 января 2011

Звучит так, будто вы хотите вернуться обратно к базовому классу, но вам нужна не просто ссылка, а экземпляр вашего базового класса.Если вы хотите сделать это в общем, я думаю, вы могли бы использовать некоторое отражение, чтобы получить все подклассы Animal и отобразить этот тип обратно в Animal.Примерно так:

var currentAssem = Assembly.GetExecutingAssembly();
var animals = currentAssem.GetTypes().Where(t => t.IsSubclassOf(typeof(Animal)));
foreach(var animalType in animals)
{
    Mapper.CreateMap(animalType, typeof (Animal));
}

Теперь вы можете сопоставить любой подкласс животных обратно с Animal:

var cat = new Cat { NumberOfLegs = 4, FurColor = "blue" };
var dog = new Dog { NumberOfLegs = 4, WoofType = "squeek" };

var animal1 = Mapper.Map<Cat, Animal>(cat);
var animal2 = Mapper.Map<Dog, Animal>(dog);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...