Aquí es cómo lo resolví:
que define una interfaz IMappingCreator
:
public interface IMappingCreator
{
void CreateMappings();
}
que siguió adelante e implementado una clase con esa interfaz (estoy usando MEF como contenedor de DI, que es donde los atributos se Viniendo de) que se pone en el contenedor DI como IMappingCreator
:
[Export(typeof(IMappingCreator))]
public class Mapping : IMappingCreator
{
private readonly IRefTypesLookup iRefTypesLookup;
[ImportingConstructor]
public Mapping(IRefTypesLookup rtl)
{
iRefTypesLookup = rtl;
}
public void CreateMappings()
{
Mapper.CreateMap<Journal, DisplayJournal>().AfterMap((j, dj) => dj.RefTypeName = iRefTypesLookup.Lookup(j.RefTypeID));
}
}
por último, en mi inicio de la aplicación, voy a buscar todas instanc ES de esa interfaz en el contenedor y llamar al método CreateMappings
en ellos:
var mappings = container.GetExportedValues<IMappingCreator>();
foreach (IMappingCreator mc in mappings)
{
mc.CreateMappings();
}
Esto hace que la configuración inicial bastante fácil, ya que toda la creación ocurre en un solo lugar, y usted puede tener tantos creadores de mapeo como desee (sin embargo, debe mantener esos valores al mínimo, tal vez una vez por proyecto, y obtener todos los servicios necesarios para mapear los tipos específicos en ese proyecto).
La única razón por la que puedo pensar que no sería puramente organizativo. Posiblemente tendrá un código de mapeo en todo su proyecto (s). Si su objeto de dominio cambia o dtos podría ser menos que ideal. Pero tengo curiosidad por saber de otras personas sus opiniones. – Daniel
Bueno, aún mantendría el código de mapeo en un solo lugar, es decir.esa clase, que tomaría todos los servicios necesarios del contenedor DI. Solo tengo que inicializar el mapeo yo mismo en lugar de poder confiar en el constructor estático ejecutándolo automáticamente. – Femaref
Para la versión más reciente, échele un vistazo a [this] (http://stackoverflow.com/a/35431096/1977871) así que responda – VivekDev