2017-01-31 12 views
3

サービスで自動生成WCFクライアントを参照しています。以下のようにしてユニットテストサービスとモック自動生成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声明を使用したいので、私は実装を参照します。 IDisposableClientBaseにあり、インターフェイスが部分的ではないためです。

私の問題は、ServiceClient(私はすでに偽装外部WsClientFactory)を模擬したいのですが、私が実装を使用して以来、これを行うには苦労しています。

注:実装での自動生成方法ServiceClientvirtualではありません。

+0

クラスは部分的であるとあなたの拡張インターフェイスを使用することができるはずです。インターフェイスはそうではありません。元のインターフェイスから派生し、 'IDisposable'で拡張する独自のインターフェイスを作成します。あなたのカスタムインターフェースで部分クラスを拡張して、今では 'using'ステートメントで拡張インターフェースを使うことができるはずです – Nkosi

+0

ああ、男の子!私はそれがこれを行う怠惰な方法であることを望みました。 11 Web Service Referenciaがあります。ありがとう@ Nkosi – panox

答えて

2

クラスは部分的です。インターフェイスはそうではありません。

元のインターフェイスから派生し、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; 
    } 
} 
関連する問題