Oto jak rozwiązać go:
ja zdefiniował IMappingCreator
interfejs:
public interface IMappingCreator
{
void CreateMappings();
}
poszedł do przodu i wdrożone klasę z tego interfejsu (używam MEF jako DI kontenera, to gdzie atrybuty są comming z), która jest umieszczona w kontenerze DI jako 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));
}
}
Wreszcie w moim uruchamiania aplikacji, ja pobrać wszystkie instanc es tego interfejsu w pojemniku i wywołać metodę CreateMappings
na nich:
var mappings = container.GetExportedValues<IMappingCreator>();
foreach (IMappingCreator mc in mappings)
{
mc.CreateMappings();
}
To sprawia, że początkowa konfiguracja dość łatwe, jak wszystko stworzenie dzieje się w jednym miejscu, i można mieć tyle twórców odwzorowań, ile chcesz (jednak powinieneś ograniczyć je do minimum, może raz na projekt lub tak, chwytając wszystkie potrzebne usługi do mapowania konkretnych typów w tym projekcie).
Jedyny powód, dla którego nie mogę, byłby czysto organizacyjny. Będziesz mieć kod mapowania w całym projekcie (ach). Jeśli twój obiekt domeny się zmienia lub dtos może być mniejszy niż idealny. Ale jestem ciekawy, aby dowiedzieć się od innych ludzi ich opinii. – Daniel
Cóż, nadal zachowałbym kod mapowania w jednym miejscu - tj.tej klasy, która pobierałaby wszystkie potrzebne usługi z kontenera DI. Muszę tylko zainicjować mapowanie, zamiast polegać na automatycznym wykonaniu konstruktora statycznego. – Femaref
Aby uzyskać najnowszą wersję, spójrz na [this] (http://stackoverflow.com/a/35431096/1977871), więc odpowiedz – VivekDev