Можно ли избавиться от универсального типа TClient в классе Service

Для клиентов WCF у меня естьIServiceProxyFactory интерфейс для установки учетных данных.

public interface IServiceProxyFactory<T>
{
    T GetServiceProxy();
}

public class ServiceProxy1 : IServiceProxyFactory<ServiceClient1>
{
    public ServiceClient1 GetServiceProxy()
    {
        var client = new ServiceClient1();
        // set credentials here
        return client;
    }
}

public class ServiceProxy2 : IServiceProxyFactory<ServiceClient2> { 
    // ... 
} 

Из вопросаКак лучше всего обойти проблему с клиентом WCF, использующим блокировку?и я создал помощника следующим образом:

public static class Service<TProxy, TClient>
    where TProxy : IServiceProxyFactory<TClient>, new()
    where TClient : ICommunicationObject
{
    public static IServiceProxyFactory<TClient> proxy = new TProxy();

    public static void Use(Action<TClient> codeBlock)
    {
        TClient client = default(TClient);
        bool success = false;
        try
        {
            client = proxy.GetServiceProxy();
            codeBlock(client);
            ((ICommunicationObject)client).Close();
            success = true;
        }
        finally
        {
            if (!success)
            {
                ((ICommunicationObject)client).Abort();
            }
        }
    }
}

И я использую помощник как:

Service<ServiceProxy1, ServiceClient1>.Use(svc => svc.Method()); 

Вопрос:

Есть ли способ, которым я могу избавиться отTClient или жеTProxy(Обновлено) введите, чтобы я мог позвонить с помощью:

Service<ServiceProxy1>.Use(svc => svc.Method()); 

ИЛИ ЖЕ(Обновлено)

Service<ServiceClient1>.Use(svc => svc.Method()); 

Есть ли лучший способ, чем использоватьICommunicationObject заClose() а такжеAbort()?

Ответы на вопрос(2)

Ваш ответ на вопрос