4

我们在代码库上使用基于构造函数的依赖注入、AutoMapperUnity

我们用通用接口包装了 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到每个映射?AutomaticMapperTSourceTDestination

4

3 回答 3

9

我们实际上做了几乎完全相同的事情。在 Unity 中,您可以说:

unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));
于 2010-02-04T18:18:16.810 回答
1
public class AutomaticMapper : IMapper
{
    public TDestination Map<TSource, TDestination>(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}
于 2010-02-04T14:05:24.017 回答
1

Unity 有一个自动注册插件,可以满足您的需求。看看http://unity.codeplex.com/Thread/View.aspx?ThreadId=59418

于 2010-02-04T14:12:44.310 回答