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 Au开发者_开发技巧tomaticMapper
using the same TSource
and TDestination
for each of them?
We actually do almost the same exact thing. In Unity, you can say:
unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));
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
public class AutomaticMapper : IMapper
{
public TDestination Map<TSource, TDestination>(TSource source)
{
return AutoMapper.Mapper.Map<TSource, TDestination>(source);
}
}
精彩评论