AutoMapper: Сопоставить интерфейс с абстрактным классом - это возможно?

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

public interface MyRepo 
{
    IEnumerable<IRootObject> GetItems(param);
}

IRootObject выглядит так:

public interface IRootObject
{
    int Id { get; set; }
    DateTime? Date { get; set; }
}

public interface IFirstSubObject : IRootObject 
{
    string MyFirstProp { get; set; }
}

public interface ISecondSubObject : IRootObject 
{
    string MySecondProp { get; set; }
}

Таким образом, вызов GetItems () фактически возвращает массив только IxxxSubObjectItems . Вкл. с другой стороны структура выглядит так:

public abstract class MyCustomRoot
{
    protected MyCustomRoot(){}
    public int Id { get; set; }
    public DateTime? Date { get; set; }
}

public class MyCustomFirstSub : MyCustomRoot
{
    public MyCustomFirstSub() : base() {} 
    public string MyFirstProp { get; set; }
}

public class MyCustomSecondSub : MyCustomRoot
{
    public MyCustomSecondSub () : base() {} 
    public string MySecondProp { get; set; }
}

Теперь я настроил преобразователь l Как и так

AutoMapper.Mapper.CreateMap<IRootObject, MyCustomRoot>
    .Include<IFirstSubObject, MyCustomFirstSub>
    .Include<ISecondSubObject, MyCustomSecondSub>();

AutoMapper.Mapper.CreateMap<IFirstSubObject, MyCustomFirstSub>();
AutoMapper.Mapper.CreateMap<ISecondSubObject, MyCustomSecondSub>();

Но я продолжаю получать MapperExceptions («Невозможно построить абстрактный класс», что в некотором смысле имеет смысл). Я также вызываю AssertConfigurationIsValid , и это подходит для этого кода.
Если я не сделаю класс MyCustomRoot абстрактным, то сопоставление будет работать, но я получу список объектов MyCustomRoot , хотя на самом деле мне бы хотелось иметь список MyCustomxxxSub , потому что позже появится Factory, который использует этот тип для генерации правильного пользовательского интерфейса ...

Я надеюсь, что кто-то может указать мне правильное направление для этого!
Спасибо!

5
задан RoelF 7 April 2011 в 08:45
поделиться