Указание отображения типа Unity по умолчанию для универсального интерфейса и пары классов - PullRequest
4 голосов
/ 04 февраля 2010

Мы используем внедрение зависимостей на основе конструктора, AutoMapper и Unity на базе кода.

Мы обернули AutoMapper универсальным интерфейсом ...

public interface IMapper<TSource, TDestination>
{
    TDestination Map(TSource source);
}

И класс, который реализует этот интерфейс ...

public class AutomaticMapper<TSource, TDestination> : IMapper<TSource, TDestination>
{
    public TDestination Map(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}

Это хорошо работает, но это означает, что для каждого отображения, которое мы определяем в конфигурации AutoMapper, нам нужно выполнить дополнительный UnityContainer.RegisterType.

Эти сопоставления типов почти всегда имеют форму

container.RegisterType<IMapper<ClassA, ClassB>, AutomaticMapper<ClassA, ClassB>>();

Есть ли способ, которым мы можем сказать единице, чтобы использовать отображение типов по умолчанию, которое сопоставляется с IMapper на AutomaticMapper, используя те же TSource и TDestination для каждого из них?

Ответы [ 3 ]

9 голосов
/ 04 февраля 2010

Мы на самом деле делаем почти то же самое. В Unity вы можете сказать:

unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));
1 голос
/ 04 февраля 2010

Для Unity есть надстройка автоматической регистрации, которая, вероятно, делает то, что вы хотите. Посмотрите на http://unity.codeplex.com/Thread/View.aspx?ThreadId=59418

1 голос
/ 04 февраля 2010
public class AutomaticMapper : IMapper
{
    public TDestination Map<TSource, TDestination>(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}
...