Использование Automapper в приложении MVVM - PullRequest
3 голосов
/ 07 апреля 2010

Я создаю приложение MVVM. Модель / сущность (я использую NHibernate) уже готова, и я думаю об использовании AutoMapper для отображения между ViewModel и Model.

Однако этот пункт пугает меня до безумия: (от http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/01/22/automapper-the-object-object-mapper.aspx)

AutoMapper обеспечивает это для каждой карты типа (пара источник / назначение), все свойства типа назначения соответствуют что-то типа источника

Для меня логичным выбором является сопоставление модели с моделью представления (и я позволю viewmodel вручную назначать модели), но цитата в основном убивает идею, поскольку модель представления определенно будет иметь свойства, которые не существуют в модель.

Как вы использовали Automapper в приложении MVVM? Пожалуйста, помогите!

Ответы [ 3 ]

7 голосов
/ 07 апреля 2010

Когда он говорит «карта», это не означает, что это отображение 1: 1, это просто означает, что все ваши свойства должны быть учтены.Либо Automapper может выяснить это по соглашению, вы явно отобразите их или явно скажете, чтобы игнорировали данное свойство.

Вот пример из документации.Как вы можете видеть, свойство отображается в определенном смысле, но Automapper знает, что нужно просто игнорировать его.

Mapper.CreateMap<Source, Destination>()
    .ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());
0 голосов
/ 11 ноября 2014

Мне было интересно, пытался ли кто-нибудь сделать что-то вроде этого:

public bool SetMappedProperty<TC,TV>(ref TC cont, TV value, [CallerMemberName] string propertyName = null)
    {
        var prop = cont.GetType().GetProperty(propertyName);
        var old = prop.GetValue(cont, null);

        if (Equals(old, value)) { return false; }

        prop.SetValue(cont, value);

        RaisePropertyChanged(propertyName);
        return true;
    }

и использовал это так:

public override MyType MyProperty
    {
        get { return _myData.MyProperty; }
        set { SetMappedProperty( ref _myData, value); }
    }

реактивные расширения WhenanyValue - также могут помочь

0 голосов
/ 15 мая 2012

Вы можете исследовать, используя Polymod . Полимодные прокси - это, по сути, модели представления, которые обертывают ваши объекты nhibernate. С помощью этой формулы вы можете добавлять самообновляющиеся свойства, такие как IsComboVisible = (domainobject.A + domainobject.B> 10)

...