microsoft ivalueresolver iservicecollection injection extensions dependencyinjection dependency custom dependency-injection unity-container automapper

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<,>));



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