在AutoMapper中注册Custom Generic类型

时间:2013-03-21 13:35:09

标签: automapper

我希望注册custo泛型类型,如在AutoMappper中的autoMaper(如List,Array)中注册的默认泛型类型。

我在这个代码的项目中有一个通用类型:

class PagedResult<T>
{
    public List<T> PageOfResults { get; set; }

    public int TotalItems { get; set; }
} 

和Dto Class是:

class StudentDto
{
    public int ID { get; set; }
    public string Name { get; set; }
}

和VM模型是:

class StudentVM
{
    public int ID { get; set; }
    public string Name { get; set; }
}

和服务类:

class MyServie
{
    public PagedResult<StudentDto> Swap()
    {
        var test2 = new PagedResult<StudentDto>();
        test2.PageOfResults = new List<StudentDto>();
        test2.PageOfResults.Add(new StudentDto() { ID = 10, Name = "Ten" });
        test2.TotalItems = 10;

        return test2;
    }
}

我希望使用AutoMapper对象管理器来注册PagedResult&lt;&gt;在automapper但我无法做到这一点

var allMappers = MapperRegistry.AllMappers();

MapperRegistry.AllMappers = () => new IObjectMapper[]{
     new IdentifiableMapper(),
}.Concat(allMappers);

var service = new MyServie();
PagedResult<StudentDto> pageableStudentDto = service.Swap();

Mapper.CreateMap<StudentDto, StudentVM>();;

PagedResult<StudentVM> vm = Mapper.Map<PagedResult<StudentDto>, PagedResult<StudentVM>>(pageableStudentDto);

并实施

public class PageOfMapper : IObjectMapper
{
    public bool IsMatch(ResolutionContext context)
    {
        return typeof(PagedResult<>).IsAssignableFrom(context.SourceType.GetGenericTypeDefinition()) &&
            typeof(PagedResult<>).IsAssignableFrom(context.DestinationType.GetGenericTypeDefinition());
        //return true;
    }

    public object Map(ResolutionContext context, IMappingEngineRunner mapper)
    {
        // please help me in this code for map ******************

        return null;
    }
}

0 个答案:

没有答案