#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. отличный комментарий Криса Уолша, друга