Использование универсального метода расширения для сопоставления объекта с моделью просмотра

#c# #automapper

#c# #automapper

Вопрос:

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

Чего я пытаюсь достичь, так это следующего

У меня есть класс User и другой класс UserVM

 User dbUser = new User();
UserVM userMapped = dbUser.MapToViewlModel<UserVM>();
  

И из внутренней реализации метода я буду использовать AutoMapper Mapper.Map()

Вот мой код

 public static class DataMapperExtensions
    {
        public static M MapToViewModel<M>(this T input)
            where T : class
            where M: class
        {
            return Mapper.Map<T, M>(input);
        }
    }
  

T никогда не компилируется, я даже попробовал приведенный ниже код:

 public static class DataMapperExtensions<T> where T: class
    {
        public static M MapToViewModel<M>(this T input)
            where M: class
        {
            return Mapper.Map<T, M>(input);
        }
    }
  

В приложениях DataMapperExtensions подчеркиваются слова «Метод расширения должен быть определен в неродовом статическом классе».

Возможно ли вообще то, о чем я прошу? Пожалуйста, дайте мне знать и заранее спасибо.

Ответ №1:

Вам нужно использовать

 public static M MapToViewModel<T,M>(this T input)
  

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

1. и использование будет выглядеть как UserVM mappedUser = dbUser.MapToViewModel<Пользователь, UserVM>(); ?