2011-05-09 12 views
7

Powiedz, że mam klasę źródłową i docelową odwzorowaną za pomocą AutoMappera. Miejsce docelowe ma usługę rejestratora wstrzykniętą do konstruktora.Wstrzyknij usługę do docelowej klasy AutoMappera

Nie wiem jednak, jak uzyskać usługę wstrzykniętą do konstruktora za pomocą StructureMap?

Próbowałem następujące:

Mapper.Initialize(m => 
{     
    m.ConstructServicesUsing(ObjectFactory.GetInstance); 
}); 

co nie przeszkodziło mi o wyjątek na wezwanie mapowania, chyba dlatego, że usługa nie jest wstrzykiwany w prawidłowo.

Próbowałem również następujące:

CreateMap<Source, Dest>() 
.ConstructUsing(x=> ObjectFactory.GetInstance<ILoggerService>()); 

Ale pojawia się błąd: nie można przekształcić wyrażenie Lamda przekazać typ, ale wszystkie przykłady widziałem użyć tej metody?

Odpowiedz

5

Wartość lambda, którą przekazujesz do ConstructUsing, musi zwrócić instancję typu docelowego. Więc w twoim przypadku, co chcesz to zrobić:

CreateMap<Source, Dest>() 
.ConstructUsing(x=> ObjectFactory.GetInstance<Dest>()); 

Zakładając masz konfigurację StructureMap poprawnie, należy utworzyć obiekt Doc i wstrzyknąć ILoggerService dla Ciebie.

+0

doskonałe! Dzięki. – jaffa

4

Można też to zrobić:

 Mapper.Configuration.ConstructServicesUsing(container.Resolve); 

     Mapper.CreateMap<Source, Dest>().ConstructUsingServiceLocator(); 
+0

W interesie, czy byłby szybszy niż wybrana odpowiedź, ponieważ obiekt został właśnie rozwiązany zamiast przechodzenia przez fabrykę? – Worthy7

Powiązane problemy