c# - 用于调用服务的 IService 接口(interface)。每个方法一个代理或一个全局类级代理

标签 c# mvvm event-handling windows-phone-7 mvvm-light

我正在使用来自 Silverlight 应用程序 (MVVM) 和 Windows Phone 的 WCF 服务。我有一个服务类(自动生成)和一个 IServiceRepository 如下所示

public interface IServiceRepository
{
  event EventHandler<SomeEventArgs> GetDataCompleted;
  void Data GetData();
  // 10 more methods for fetching different data.
}

我的 SerViceRepository 如下所示

 public class ServiceRepository : IServiceRepository
    {
       public event EventHandler<SomeEventArgs> GetDataCompleted;

       public void Data GetData()
       {
          var proxy = new ActualServiceRefClient();
          proxy.GetDataCompleted += PrivateGetDataCompleted;
          proy.GetDatAsync();
       }

       private void PrivateGetDataCompleted(object s, SomeEventArgs e)
       {
         // Error check and all
         if(GetDataCompleted != null)
            GetDataCompleted(this, new SomeEventArgs(...));
       }
    }

我从我的 ViewModels 调用这个方法。现在我的问题是......

  1. 现在我正在创建代理 类和附加事件处理程序 以各种方式使用它。我应该怎么做 它在的构造函数中 服务库?正如我所说,我有 大约10到12种服务方式 打电话。
  2. 我应该在已完成的方法中注销事件处理程序吗?

最佳答案

  1. 我不确定它去哪里很重要。如果您只有一个调用的实际服务方法,那么将事件连接放在构造函数中是有意义的。如果您的服务存储库中的 10 种数据方法中的每一种都有一个实际的服务方法,那么将它们连接到 10-12 种单独的方法中的每一种方法更有意义。

  2. 视情况而定。如果您保留服务存储库的一个实例,多次调用它,那么您应该将事件连接移至构造函数,或者确保您不会在每次调用时重新连接事件处理程序。或者,您可以按照您所说的取消注册,但我认为最好在对象的生命周期内注册一次这些事件处理程序。如果您只是为每个 jar 头创建一个新的服务存储库实例,则无需注销事件处理程序。

希望这对您有所帮助!

关于c# - 用于调用服务的 IService 接口(interface)。每个方法一个代理或一个全局类级代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4100183/

相关文章:

c# - C#中隐式转换的顺序

c# - 比较具有毫秒精度的日期时间

c# - 有界元素的 ItemsSource 未在 View 中更新

c# - 从另一个类(class)收听 PropertyChanged

javascript - 触发内部元素的点击事件

c# - 接口(interface)隔离原则——如何决定隔离什么?

c# - 关键字映射错误

mvvm - RadGridView 编辑按钮命令在 Prism 4.1 Silverlight 5 中未绑定(bind)

c# - 具有私有(private) setter 的属性与仅获取属性

c# - C#关闭窗口的方法