dependency-injection - ivalueresolver - custom automapper
Especificación de una asignación de tipo Unity predeterminada para una interfaz genérica y un par de clases (3)
Estamos usando inyección de dependencia basada en el constructor, AutoMapper y Unity en una base de código.
Hemos envuelto AutoMapper con una interfaz genérica ...
public interface IMapper<TSource, TDestination>
{
TDestination Map(TSource source);
}
Y una clase que implementa esta interfaz ...
public class AutomaticMapper<TSource, TDestination> : IMapper<TSource, TDestination>
{
public TDestination Map(TSource source)
{
return AutoMapper.Mapper.Map<TSource, TDestination>(source);
}
}
Esto funciona bien, pero significa que para cada asignación que definimos en la configuración de AutoMapper necesitamos realizar UnityContainer.RegisterType
adicional.
Estas asignaciones de tipos son casi siempre de la forma
container.RegisterType<IMapper<ClassA, ClassB>, AutomaticMapper<ClassA, ClassB>>();
¿Hay alguna forma de que podamos decirle a unity que use un mapeo de tipo predeterminado que mapea desde IMapper
a AutomaticMapper
usando el mismo TSource
y TDestination
para cada uno de ellos?
En realidad hacemos casi lo mismo. En Unity, puedes decir:
unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));
Hay un complemento de registro automático para Unity que probablemente hace lo que desea. Eche un vistazo a 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);
}
}