Пользовательский конструктор AutoMapper TypeConverter

#dependency-injection #automapper

#внедрение зависимостей #automapper

Вопрос:

Привет, я использую AutoMapper для перехода от модели к Dto, и он отлично работает. В одном из них TypeConverter мне нужно внедрить интерфейс (сервис), который должен использоваться преобразователем типов для выполнения преобразования.

Как я могу выполнить это в AutoMapper?

Комментарии:

1. Какой пакет внедрения зависимостей вы используете?

Ответ №1:

Разве вы не можете просто создать конструктор в своем TypeConverter классе, принимая сервис? Вместо того, чтобы использовать универсальный ConvertUsing , передайте новый экземпляр вашего TypeConverter , созданный с помощью сервиса…

     public class MyTypeConverter : TypeConverter<String, String>
    {
        public MyTypeConverter(IMyService service)
        {
            MyService = service;
        }

        public IMyService MyService { get; set; }

        protected override string  ConvertCore(string source)
        {
            //use service
        }
     }
  

Использование:

      Mapper.CreateMap<string, string>()
                     .ConvertUsing(new MyTypeConverter(_myService));
  

Комментарии:

1. О да, я не знал, что могу это сделать. Я использовал другой метод ConvertUsing<T>()

2. Если требуемая вам служба является, IMapper тогда легко доступной ResolutionContext context в ITypeConverter<>.Convert() методе, предоставляет текущий mapper.

3. отличный комментарий Криса Уолша, друга