Как выставить классы, которые реализуют интерфейсы и используют неуправляемые ресурсы? - PullRequest
0 голосов
/ 26 июня 2010

У меня есть вопрос, касающийся использования интерфейсов, когда начинают работать неуправляемые ресурсы. Предположим, у меня есть веб-сервис и сгенерированный клиент WCF. Сервисный контракт выглядит так:

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    string GetData(int value);
}

На стороне клиента я использую внедрение зависимостей и привязываю интерфейс ITestService к TestServiceClient (генерируется с svcutil). Однако, когда я создаю ITestService, и это действительно TestServiceClient, он должен быть расположен правильно, но клиенты не знают об этом. Как вы справляетесь с этой проблемой?

Я думал о генерации прокси-классов следующим образом:

class TestServiceClientProxy : ITestService
{
    #region ITestService Members

    public string GetData(int value)
    {
        var client = new TestServiceClient();
        bool success = false;
        try
        {
            var result = client.GetData(value);
            client.Close();
            success = true;
            return result;
        }
        finally
        {
            if (!success)
            {
                client.Abort();
            }
        }
    }

    #endregion
}

Однако я не думаю, что генерация кода была бы лучшим способом. Должен ли я использовать некоторые AOP Framework или DynamicProxy?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 26 июня 2010

Объявите, что ваш интерфейс реализует IDisposable, реализуйте Dispose () в конкретном классе, и ваш провайдер DI будет правильно его распределять.Если ваш провайдер DI этого не делает, найдите нового.

[ServiceContract]
public interface ITestService : IDisposable
{
    [OperationContract]
    string GetData(int value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...