我有一个抽象类,用于在WCF代理中设置缺省值。我希望我的所有其他代理都能从这个类派生出来,并传入在添加服务引用时生成的服务客户端。因此,我有以下将参数传递给在抽象类中创建的新泛型类
public abstract class ProxyFactory<T> where T : new()
{
protected BasicHttpBinding BasicHttpBinding = new BasicHttpBinding();
public abstract T GetTranslationServiceClient();
protected ProxyFactory()
{
BasicHttpBinding.Security.Mode = BasicHttpSecurityMode.None;
}
protected T CreateClientForServiceAtEndpoint(string uri)
{
var address = new EndpointAddress(uri);
return new T(BasicHttpBinding, address);
}
}
因此,举例来说,如果你有一个项目,并增加了一个服务引用WCF服务名为MyService
你会叫MyServiceClient
生成的类。然后,我将创建一个名为MyServiceProxy
的新类,该类将从此类派生,其中T将是MyServiceClient
类型。这将允许我在基础中完成所有常用配置,并且我需要编写的唯一代码是使用服务的url覆盖CreateClientForServiceAtEndpoint
。
public override MyServiceImplClient GetMyServiceClient()
{
return CreateClientForServiceAtEndpoint("http://localhost/MyServices/MyServiceImpl.svc");
}
在此派生类将被用作工厂,以便给客户打电话将创建一个新的实例并调用CreateClientForServiceAtEndpoint
得到预先配置的WCF代理
的问题是线return new T(BasicHttpBinding, address);
中的的CreateClientForServiceAtEndpoint
方法抽象类。它不会允许我将参数传递给构造函数。如何才能做到这一点?
它有时可能是一个更好的选择来引入一个初始化方法的接口 – 2012-01-07 10:50:38