Внедрить сервис в целевой класс AutoMapper - PullRequest
8 голосов
/ 09 мая 2011

Скажем, у меня есть исходный и целевой класс, который отображается с помощью AutoMapper. В месте назначения есть служба ведения журнала, внедренная в конструктор.

Однако я не знаю, как добавить сервис в конструктор через StructureMap?

Я пробовал следующее:

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

, что не помешало мне получить исключение при вызове сопоставления, я полагаю, потому что служба не внедряется должным образом.

Я также попробовал следующее:

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

Но я получаю ошибку: не может преобразовать выражение Lamda в тип делегата , но все примеры, которые я видел, используют этот метод?

Ответы [ 2 ]

5 голосов
/ 10 мая 2011

Лямбда, которую вы передаете в ConstructUsing, должна возвращать экземпляр типа назначения.Так что в вашем случае вы захотите сделать это:

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

Если вы правильно настроили StructureMap, он должен создать объект Dest и внедрить ILoggerService для вас.

4 голосов
/ 10 августа 2012

Вы также можете сделать это:

        Mapper.Configuration.ConstructServicesUsing(container.Resolve);

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