没有存储库模式的 Silverlight 中的 OData

发布于 2024-11-07 03:25:30 字数 1101 浏览 2 评论 0 原文

我正在尝试使用 OData 和 Silverlight 创建一个示例应用程序,并使用(还有什么?)Netflix 服务。我已经成功使用 WPF 创建应用程序,但正在努力将我的服务类移植到异步模型。

我现有的服务类(简化)如下所示:

public IEnumerable<Title> BlockingSearch(TitleSearchParam param)
{
    var catalog = new NetflixCatalog(new Uri("http://odata.netflix.com/Catalog/"));

    return catalog.Titles.Where(t =>
                            t.Instant.AvailableFrom > param.InstantStartDate && t.Instant.AvailableFrom < param.InstantEndDate &&
                            (string.IsNullOrEmpty(param.TitleName) || t.Name.Contains(param.TitleName))).ToList();

    }

异步消费 OData 的所有示例均采用某种存储库模式和/或需要传入实例化集合。我想为 Silverlight/Async 的方法签名建模调用看起来像这样(服务类本身是无状态的):

public void AsyncSearch(TitleSearchParam param, Action<IEnumerable<Title>> completedCallback, Action<MyErrorClass> errorCallback, object callBackOwner)
{

}

我想我可以所以沿着MS在异步调用同步方法,但我希望有一个更优雅的解决方案失踪了。

I am trying to create a sample app using OData and Silverlight, using (what else?) the Netflix service. I've already succeeded in creating the app using WPF, but am struggling to port my service class to an async model.

My existing service class (simplified) looks like this:

public IEnumerable<Title> BlockingSearch(TitleSearchParam param)
{
    var catalog = new NetflixCatalog(new Uri("http://odata.netflix.com/Catalog/"));

    return catalog.Titles.Where(t =>
                            t.Instant.AvailableFrom > param.InstantStartDate && t.Instant.AvailableFrom < param.InstantEndDate &&
                            (string.IsNullOrEmpty(param.TitleName) || t.Name.Contains(param.TitleName))).ToList();

    }

All of the examples of consuming OData asynchronously employ some kind of Respository Pattern and/or require an instantiated collection to be passed in. I would like to model the method signature for the Silverlight/Async call to look something like this (with the service class itself being stateless):

public void AsyncSearch(TitleSearchParam param, Action<IEnumerable<Title>> completedCallback, Action<MyErrorClass> errorCallback, object callBackOwner)
{

}

I think I could so something along the lines of what MS outlines in Calling Synchronous Methods Asynchronously, but I was hoping there was a more elegant solution that I was missing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

〗斷ホ乔殘χμё〖 2024-11-14 03:25:30

正如您所知,您始终可以在与 UI 线程不同的线程上运行调用,因此本身不会发生阻塞。这似乎是一个足够不错的解决方案。然后,如果您打算将调度程序与 UI 一起使用,您可以(事实上,必须)使用调度程序来处理来自回调的结果。

As you already know, you can always run the call on a different thread than the UI thread, so there will be no blocking per se. That seems like a decent enough solution. Then you can (in fact, must) use dispatchers to handle results coming from callbacks if you intend to use them with UI.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文