我正在用 C# 编写一个 .NET 库,用于使用 HTTP 通过其 JSON RPC 接口与XBMC进行通信。
我编写并发布了一个初步版本,但一切都是同步完成的。然后,我出于自己的目的将库重新编码为异步的,因为我正在/正在为 WP7 构建 XBMC 遥控器。
我现在想发布新的异步库,但想在我发布之前确保它整洁。
由于异步性质,用户发起请求,提供与我的委托匹配的回调方法,然后在收到响应后处理响应。
我遇到的问题是,在库中,我在请求的生命周期内跟踪 RequestState 对象,它包含 http 请求/响应以及用户回调等作为成员变量,如果只有一种类型的对象就可以了回来了,但根据用户所说的,他们可能会返回歌曲列表或电影列表等。
我目前的实现使用一个单一的委托 ResponseDataRecieved 它有一个参数是一个简单的对象 - 因为这只有我使用我知道哪些方法返回什么以及当我处理响应时我将所述对象转换为我知道的类型它真的是 - 列表,列表等。
第三方不应该这样做 - 委托签名应该包含正确类型的对象。因此,对于可以返回给第三方的每种类型的响应数据,我都需要一个委托 - 具体问题是,我如何在内部优雅地处理这个问题 - 我是否有一堆不同的 RequestState 对象,每个对象都有不同的成员变量为不同的代表?这并不“感觉”正确。我只是不知道如何优雅而干净地做到这一点。