Ecco come ho risolto:
ho definito un IMappingCreator
interfaccia:
public interface IMappingCreator
{
void CreateMappings();
}
sono andato avanti e implementato una classe con tale interfaccia (sto usando MEF come contenitore DI, è lì gli attributi vengono Provenendo dalla) che è messo nel contenitore dI come 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));
}
}
Infine, a mio avvio dell'applicazione, vado a prendere tutte Instan ES di tale interfaccia nel contenitore e chiamare il metodo CreateMappings
su di loro:
var mappings = container.GetExportedValues<IMappingCreator>();
foreach (IMappingCreator mc in mappings)
{
mc.CreateMappings();
}
Questo rende la configurazione iniziale abbastanza facile, come tutta la creazione avviene in un unico luogo, e si può avere il maggior numero di creatori di mappatura come si desidera (tuttavia, è necessario mantenerli al minimo, magari una volta per progetto o giù di lì, afferrando tutti i servizi necessari per mappare i tipi specifici in quel progetto).
L'unica ragione per cui non posso pensare sarebbe puramente organizzativa. Potresti avere un codice di mappatura su tutti i tuoi progetti. Se il tuo oggetto dominio cambia o dtos potrebbe non essere l'ideale. Ma sono curioso di scoprire dalle altre persone le loro opinioni. – Daniel
Bene, manterrei comunque il codice di mappatura in un unico posto, ad es.quella classe, che prenderebbe tutti i servizi necessari dal contenitore DI. Devo solo inizializzare la mappatura da solo invece di poter fare affidamento sul costruttore statico eseguendolo automaticamente. – Femaref
Per l'ultima versione, dai un'occhiata a [questo] (http://stackoverflow.com/a/35431096/1977871) quindi rispondi allo – VivekDev