Зарегистрировать универсальный интерфейс с неуниверсальным классом - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть универсальный интерфейс в моем приложении:

public interface IBaseMapper<DTO, Entity> 
    where DTO : class, new()
    where Entity : class, new()
{
    List<DTO> EntityToDTO_Transform(List<Entity> requestEntity);
    Entity DTOEntity_Transform(DTO requestDTO);
}

, который реализуется неуниверсальным классом:

public class RequestMapper : IBaseMapper<RequestDTO,REQUEST>
{
    public REQUEST DTOEntity_Transform(RequestDTO requestDTO)
    {
        return Mapper.Map<RequestDTO, REQUEST>(requestDTO);
    }

    public List<RequestDTO> EntityToDTO_Transform(List<REQUEST> requestEntity)
    {
        return Mapper.Map<List<REQUEST>, List<RequestDTO>>(requestEntity);
    }
}

Я использую Unity в качестве контейнера IoCдля внедрения зависимостей.

Как разрешить зависимости?

var container = new UnityContainer();

container.RegisterType(typeof(IBaseMapper<>), typeof(RequestMapper); // ???

config.DependencyResolver = new UnityDependencyResolver(container);

Есть мысли?

1 Ответ

0 голосов
/ 19 сентября 2018

Поскольку RequestMapper не является универсальным, вам необходимо указать его закрытую универсальную абстракцию при создании отображения следующим образом:

container.RegisterType(
    typeof(IBaseMapper<RequestDTO,REQUEST>), 
    typeof(RequestMapper));
...