Specifying a default Unity type mapping for a gene

2020-02-29 04:41发布

We're using constructor-based dependency injection, AutoMapper and Unity on a codebase.

We have wrapped AutoMapper with a generic interface...

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

And a class that implements this interface...

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

This works well, but it means that for every mapping we define in the AutoMapper configuration we need to perform an additional UnityContainer.RegisterType.

These type mappings are almost always of the form

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

Is there any way that we can tell unity to use a default type mapping that maps from IMapper to AutomaticMapper using the same TSource and TDestination for each of them?

3条回答
太酷不给撩
2楼-- · 2020-02-29 04:49

We actually do almost the same exact thing. In Unity, you can say:

unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));
查看更多
狗以群分
3楼-- · 2020-02-29 04:52

There's an auto registration add-in for Unity that probably does what you want. Have a look at http://unity.codeplex.com/Thread/View.aspx?ThreadId=59418

查看更多
做自己的国王
4楼-- · 2020-02-29 05:08
public class AutomaticMapper : IMapper
{
    public TDestination Map<TSource, TDestination>(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}
查看更多
登录 后发表回答