我正在使用来自 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 调用这个方法。现在我的问题是......
- 现在我正在创建代理 类和附加事件处理程序 以各种方式使用它。我应该怎么做 它在的构造函数中 服务库?正如我所说,我有 大约10到12种服务方式 打电话。
- 我应该在已完成的方法中注销事件处理程序吗?
最佳答案
我不确定它去哪里很重要。如果您只有一个调用的实际服务方法,那么将事件连接放在构造函数中是有意义的。如果您的服务存储库中的 10 种数据方法中的每一种都有一个实际的服务方法,那么将它们连接到 10-12 种单独的方法中的每一种方法更有意义。
视情况而定。如果您保留服务存储库的一个实例,多次调用它,那么您应该将事件连接移至构造函数,或者确保您不会在每次调用时重新连接事件处理程序。或者,您可以按照您所说的取消注册,但我认为最好在对象的生命周期内注册一次这些事件处理程序。如果您只是为每个 jar 头创建一个新的服务存储库实例,则无需注销事件处理程序。
希望这对您有所帮助!
关于c# - 用于调用服务的 IService 接口(interface)。每个方法一个代理或一个全局类级代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4100183/