powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Базовый автомаппер
13 сообщений из 13, страница 1 из 1
Базовый автомаппер
    #39557243
Привет всем.

Просьба помочь. Уже мозг вывихнул и туплю.

Пишу класс базового мапера на базе AutoMapper. В проекте туча всяких моделей

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
    // какой то класс модели
    public class Model1
    {
        public string MyProperty1 { get; set; }
        public string MyProperty2 { get; set; }
    }
    // какой то Дб объект
    public class Dto1
    {
        public bool MyProperty1 { get; set; }
        public string MyProperty2 { get; set; }
    }

    public interface IModelAutoMapper<Dto, Model>
    {
        Model ToModel(Dto source);
    }

    public abstract class ModelAutoMapperBase<Dto, Model> : IModelAutoMapper<Dto, Model>
        where Dto : class, new()
        where Model : class, new()
    {
        private IMapper toModelMapper;
        public MapperConfiguration toModelConfig;
        protected MapperConfigurationExpression toModelExpression;
        protected IMappingExpression<Dto, Model> modelMappingExpression;


        virtual protected void ToModelConfigure(MapperConfigurationExpression expr)
        {
            toModelConfig = new MapperConfiguration(expr);
        }

       

        public Model ToModel(Dto source) => toModelMapper.Map<Model>(source);

        #region ctor
        public ModelAutoMapperBase()
        {

            toModelExpression = new MapperConfigurationExpression();

       
            ToModelConfigure(toModelExpression);
            toModelMapper = toModelConfig.CreateMapper();

        }
        #endregion
    }



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

Код: c#
1.
2.
3.
4.
5.
6.
7.
    public class Model1Mapper : ModelAutoMapperBase<Dto1, Model1>
    {    }

  // потом в коде

  var model1 = new Model1Mapper().ToModel(dto1);
 


И всё.


Но не устраивает следующее. Если нужно с выкрутасами, то нужно что-то типа:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public class Model1Mapper : ModelAutoMapperBase<Dto1, Model1>
    {
        protected override void ToModelConfigure(MapperConfigurationExpression expr)
        {
            expr.CreateMap<Dto1, Model1>().ForMember(
                dest => dest.MyProperty1,
                opt => opt.MapFrom
                   (src => src.MyProperty1.ResolveBool2YesNo()));

            base.ToModelConfigure(expr);
        }
    }



Нужно уйти от
Код: c#
1.
expr.CreateMap<Dto1, Model1>()

потому что это приходится писать ручками и можно ДТО и МОДЕЛЬ перепутать .

хочется в так:

в базовом классе:

Код: c#
1.
2.
3.
4.
      virtual protected void ToModelMapping(IMappingExpression<Dto, Model> expr)
      {
          // куда то EXPR нужно запихать
      }




Тогда в производном классе получаем автоматом
Код: c#
1.
2.
3.
4.
       protected override void ToModelMapping(IMappingExpression<Dto1, Model1> expr)
       {
            base.ToModelMapping(expr);
       }



и можем писать в производном

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
       protected override void ToModelMapping(IMappingExpression<Dto1, Model1> expr)
       {
            expr.ForMember(
                dest => dest.MyProperty1,
                opt => opt.MapFrom
                   (src => src.MyProperty1.ResolveBool2YesNo()));

            base.ToModelMapping(expr);
       }



Но вот куда это пристегнуть в базовом классе ума не приложу.

Сори за г-код - сам пытаюсь задачу решить еще не причесывал. С деревьями и лямбдами плохо дружу
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557373
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленый,

Попробуй убрать вызов виртуального метода из конструктора. Это первое, что бросается в глаза.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557520
refregМолодой зеленый,

Попробуй убрать вызов виртуального метода из конструктора. Это первое, что бросается в глаза.
И что будет?
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557523
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйrefregМолодой зеленый,

Попробуй убрать вызов виртуального метода из конструктора. Это первое, что бросается в глаза.
И что будет?Это ошибка в архитектуре. Исправлять то, что есть бесполезно, когда есть базовые ляпы.
тынц
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557565
refregМолодой зеленыйпропущено...

И что будет?Это ошибка в архитектуре. Исправлять то, что есть бесполезно, когда есть базовые ляпы.
тынц
Ишшо раз: всякие "архитектуры" сейчас наипоследняя проблема. Я для кого оговорился, что г-код, Я ищу реализацию хотелки. А марафет потом будем наводить.

По существу помочь можешь?
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557599
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйИшшо раз: всякие "архитектуры" сейчас наипоследняя проблема. Я для кого оговорился, что г-код, Я ищу реализацию хотелки. А марафет потом будем наводить.

По существу помочь можешь?Так как же те помочь, если у тя в этом и проблема - ты хочешь что-то сделать в производном классе, не желая сделать в базовом правильно. Неминуемо столкнешься с тем, чем ты столкнулся.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557614
refregМолодой зеленыйИшшо раз: всякие "архитектуры" сейчас наипоследняя проблема. Я для кого оговорился, что г-код, Я ищу реализацию хотелки. А марафет потом будем наводить.

По существу помочь можешь?Так как же те помочь, если у тя в этом и проблема - ты хочешь что-то сделать в производном классе, не желая сделать в базовом правильно. Неминуемо столкнешься с тем, чем ты столкнулся.
С чем я столкнулся? Текущая г-реализация через MapperConfigurationExpression работает но не устраивает. Чем - я описал.

Нужно через IMappingExpression<TSource, TDestination> , чтобы автоматом получать классы но как это реализовать в базовом классе не могу сделать.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557835
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйНужно уйти от
Код: c#
1.
expr.CreateMap<Dto1, Model1>()


потому что это приходится писать ручками и можно ДТО и МОДЕЛЬ перепутать .

Вы фигню какую-то написали.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557836
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйНо вот куда это пристегнуть в базовом классе ума не приложу.

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

Не вижу ни задачи, ни попыток решения, вы занимаетесь обыкновенной унылой тупой хернёй.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557860
hVosttМолодой зеленыйНужно уйти от
Код: c#
1.
expr.CreateMap<Dto1, Model1>()


потому что это приходится писать ручками и можно ДТО и МОДЕЛЬ перепутать .

Вы фигню какую-то написали.
Чё не нравится-то?
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39557864
hVosttМолодой зеленыйНо вот куда это пристегнуть в базовом классе ума не приложу.

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

Не вижу ни задачи, ни попыток решения, вы занимаетесь обыкновенной унылой тупой хернёй.
Ну-да, ну-да.

А вы, не ошибусь, тут первый хлопец на деревне?

Так, без флуда - какие претензии, Или подсказать - не барское дело.
Иное дело - походя обос..ь.

Мой вердикт - вам сначала к окулисту, а потом к психологу. К последнему - без шуток.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39558039
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйА вы, не ошибусь, тут первый хлопец на деревне?

Ну началось угрюмое нытьё и хлюпание.. Это никому не интересно. Если не можете описать задачу человеческим языком, идите ныть в другие места.
...
Рейтинг: 0 / 0
Базовый автомаппер
    #39558099
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйНужно уйти от
Код: c#
1.
expr.CreateMap<Dto1, Model1>()


потому что это приходится писать ручками и можно ДТО и МОДЕЛЬ перепутать .Можно добавить это в базовый класс виде метода,
а в производном писать типа:
Код: c#
1.
2.
3.
4.
            Method(expr).ForMember(
                dest => dest.MyProperty1,
                opt => opt.MapFrom
                   (src => src.MyProperty1.ResolveBool2YesNo()));

Только вот зачем? В automap есть профили, практически тоже самое, что ты пытаешься сделать.
Неужели бы не сделали то что ты пытаешься, если бы это было так нужно?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Базовый автомаппер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]