兑换?到DTO的域对象 - 无法创建接口的实例

时间:2009-01-29 10:57:25

标签: .net flex flash nhibernate remoting

您好我需要将一些对象传递给.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 - fluorFX)在设备被输入为IList时抛出并抛出错误。 “无法创建接口实例”。

我急需将设备输入List而不是IList。

有什么想法可以解决这个问题? 转换为dto会更好吗?

有没有人有这方面的经验?

我对.Net相当新,所以任何帮助/指针都非常感激。

1 个答案:

答案 0 :(得分:0)

列表是否需要有一个setter?通常,集合属性是只读的 - 您只需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;
    }
}

如果仍然无效,请尝试具体的列表类型。