2009-01-29 49 views
0

您好我需要传递一些对象来自.Net和Flex表示层。转换?域对象DTO - 无法创建一个接口的实例

我需要通过并接收以下对象。

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远程处理 - fluoroFX)在设备上输入为IList并抛出错误。 “无法创建接口的实例”。

我明显需要输入设备列表而不是IList。

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

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

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

回答

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; 
    } 
} 

如果仍然不起作用,请尝试使用具体的列表类型。

+0

谢谢, 我想我需要一个setter,因为设备可能被添加到ui工具的房间里。然后,当我更新房间时,room_equipment表格也将被更新。 – user17510 2009-01-29 11:32:17