我在服务中引用自动生成的WCF客户端。
//Autogenerated Service client
public partial class ServiceClient :
System.ServiceModel.ClientBase<IService>, IService
{
//...
}
//Autogenerated Interface Client
public interface IService {
//...
}
以下列方式:
public MyService{
public IExternalWsClientFactory ExternalWsClientFactory {get; set; }
public void MyMethod(){
using (var wsCliente = ExternalWsClientFactory.ServiceClient())
{
//...
}
}
}
public class ExternalWsClientFactory : IExternalWsClientFactory
{
public ServiceClient ServiceClient()
{
var wsClient = new ServiceClient();
return wsClient;
}
}
我引用了实现,因为我想使用using
语句来处理代码块末尾的资源。因为IDisposable
位于ClientBase
之下且界面不是部分的。
我的问题是我想模仿ServiceClient
(我已经模拟了外部WsClientFactory
)但是因为我使用了实现,所以我很难做到这一点。
注意:实施中自动生成的方法ServiceClient
不是virtual
。
答案 0 :(得分:3)
班级偏袒。界面不是。
创建自己的界面,该界面派生自原始界面,并使用IDisposable
进行扩展。
public interface IServiceClient: ICommunicationObject, IService, IDisposable { }
使用自定义界面扩展分部类
public partial class ServiceClient : IServiceClient { }
现在您应该能够使用带有using
语句
public class ExternalWsClientFactory : IExternalWsClientFactory {
public IServiceClient ServiceClient() {
var wsClient = new ServiceClient();
return wsClient;
}
}