Перерабатывать? Доменные объекты для DTO - невозможно создать экземпляр интерфейса - PullRequest
0 голосов
/ 29 января 2009

Привет! Мне нужно передать некоторые объекты в .Net и на уровень представления Flex.

Мне нужно пройти и получить следующий предмет.

 public class Room: BasicRoom
{

    private int _seatingCap; 
    private RoomType _roomType;
    private IList<Equipment> _equipment;

public virtual RoomType roomType
    {
        get { return _roomType; }
        set { _roomType = value; }
    }
    public virtual IList<Equipment> equipment
    {
        get { return _equipment; }
        set { _equipment = value; }
    }
    public virtual int seatingCap
    {
        get { return _seatingCap; }
        set { _seatingCap = value; }
    }

В настоящее время я просто передаю вышеизложенное (объект домена) на уровень представления, и это нормально. Однако, когда я хочу отправить объект обратно .Net, я сталкиваюсь с проблемой.

Так как я использую NHibernate в качестве инструмента orm, он требует от меня использования интерфейса в этом случае IList для отображения коллекций. Проблема возникает, когда я пытаюсь передать объект обратно в .Net - шлюз (flash remoting - fluorineFX) скрывается на оборудовании, которое печатается как IList, и выдает ошибку. «Невозможно создать экземпляр интерфейса».

Мне явно нужно вводить оборудование в список, а не в IList.

Какие есть идеи, чтобы обойти это? Было бы лучше преобразовать в dto's?

Кто-нибудь имел опыт с этим?

Я довольно новичок в .Net, поэтому любая помощь / указатели очень ценятся.

1 Ответ

0 голосов
/ 29 января 2009

Есть ли причина, по которой в списке должен быть сеттер? Часто свойства коллекции доступны только для чтения - вы просто Add / Remove / Clear их ...

virtual делает это хитрее - обычно я просто делаю:

public IList<Foo> Foos {get; private set;}
public Bar() { // ctor
    Foos = new List<Foo>();
}

В этом случае, возможно (поскольку мы не хотим вызывать виртуальный метод в ctor):

private IList<Foo> foos;
protected virtual IList<Foo> CreateFooList() {
    return new List<Foo>();
}
public IList<Foo> Foos {
    get {
        if(foos == null) foos = CreateFooList();
        return foos;
    }
}

Если это все еще не работает, попробуйте конкретный тип списка.

...