2017-01-31 10 views
3

Я ссылаюсь на автогенерированный WCF-клиент в службе.Единичный тест Сервис и макет Autogenerated WCF Client proxy

//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

Класс является частичным. интерфейса нет. создайте свой собственный интерфейс, который вытекает из исходного интерфейса и расширяет его с помощью 'IDisposable'. расширьте частичный класс своим пользовательским интерфейсом, и теперь вы сможете использовать расширенный интерфейс с оператором 'using' – Nkosi

+0

О, мальчик! Мне жаль, что это ленивый способ сделать это. У меня есть 11 веб-сервисов 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; 
    } 
}