如何在Silverlight / CSLA中创建延迟加载和缓存的集合

时间:2009-05-08 18:53:07

标签: silverlight caching asynchronous csla

我正在为使用CSLA编写的现有桌面应用程序创建Silverlight前端。我遇到麻烦的一件事是转换类如下:

public class SomeCollection : Csla.ReadOnlyListBase<SomeCollection, SomeObject>
{
    private static SomeCollection _list = null;
    public static SomeCollection GetSomeCollection()
    {
        if (_list == null)
        {
            _list = DataPortal.FetchChild<SomeCollection>();
        }
        return _list;
    }
}

代码中充斥着“SomeCollection.GetSomeCollection()”这对Silverlight方面不起作用,因为所有DataPortal访问都是异步的,所以你必须从以下内容开始:

public static void GetSomeCollection(EventHandler<DataPortalResult<SomeCollection>> callback)
{
    DataPortal<SomeCollection> portal = new DataPortal<SomeCollection>();
    portal.FetchCompleted += callback;
    portal.BeginFetch();
}

当数据准备好时,将调用回调处理程序。我当然可以缓存此结果,但在此期间任何SomeCollection.GetSomeCollection()调用都将失败。

我尝试阻止,直到异步调用完成,但到目前为止我没有运气。这不是一个很好的解决方案,但如果在加载数据之前调用SomeCollection.GetSomeCollection(),我不知道还能做什么。我能想到的唯一其他选项是允许SomeCollection.GetSomeCollection()返回null,然后以某种方式转换所有调用者以处理null返回值

有什么想法吗?

(我是Silverlight和Csla的新手,所以我可能会以完全错误的方式解决这个问题)

1 个答案:

答案 0 :(得分:1)