interfejsy i UpdateModel w MVC

0

Witam.

Od dwoch dni zmagam sie z nastepujacym problem i nie znalazlem zadnego ciekawego rozwiazania.

W ASP.NET MVC 2 mamy mozliwosc updatowania tylko wybranych elementow modelu przy uzyciu interfejsow, ktore udostepniaja tylko wybrane wartosci. Jest to rozwiazanie lepsze niz white listy ze wzgledu chocby na sprawdzanie literowek przez kompilator.

Moj problem jest nastepujacy:

Mam skomplikowany obiekt User, ktory posiada wlasciwosci PersonalData, Address i pare innych, ktore rowniez sa obiektami (klasami).

Mam teraz problem jak przy uzyciu jednego interfejsu (dla obiektu User) sprecyzowac dokladnie, ktore pola mnie interesuja (chcialbym za pomoca interfejsow dac dostep do roznych pol PersonalData).

Problem jest taki, ze nie wiem jak zadeklarowac te interfejsy. Probowalem w taki sposob:

    public interface IOnlyName
    {
        ILoFi PersonalData { get; set; }
    }

    public interface IGeneric
    {
    }

    public interface IHiFi : IGeneric
    {
        string FNAME_1 { get; set; }
        string LNAME { get; set; }
    }

    public interface ILoFi : IGeneric
    {
        string FNAME_1 { get; set; }
    }

problem jest jednak w tym, ze obiekt ktory zadeklarowalem w klasie User jest typu IGeneric, a kompilator nie pozwala na zadeklarowanie w interfejsie tej samej zmiennej, ktorej typ jest inny (de facto rozszerzony)

Innymi slowy: chce zeby za pomoca interfejsu raz obiekt byl widoczny z zestawem zmiennych, typu A a w drugim typu B (gdzie oba typy sa ze soba zgodne)

Jesli ktokolwiek zrozumial moj problem, to czekam na propozycje jak to rozwiazac.

0

co to znaczy ze typy są ze sobą zgodne?
Ja zrozumiałem ze chcesz zrobić coś na wzór:


public interface Idrinkable
    {
        void Drink();
    }
    public interface IFood
    {
        void Eat();
        void Drink();

    }
    class Beer : Idrinkable, IFood
    {
        #region Idrinkable Members

        void Idrinkable.Drink()
        {
            Console.WriteLine("Drink from Idrinkable");
        }

        #endregion

        #region IFood Members

        public void Eat()
        {
            Console.WriteLine("Eat from IFood");
        }

        void IFood.Drink()
        {
            Console.WriteLine("Drink from IFood");
        }

        #endregion
    }

/////////////////////////////////////////////
            Beer b = new Beer();
            ((IFood)b).Drink();
            ((Idrinkable)b).Drink();

<\cpp>

1 użytkowników online, w tym zalogowanych: 0, gości: 1