У меня возник вопрос по поводу использования интерфейсов при запуске неуправляемых ресурсов. Предположим, у меня есть веб-сервис и сгенерированный клиент 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 или DynamicProxy?
Заранее благодарим за помощь.
Взгляните на этот ответ: http://stackoverflow.com/questions/3010820/dependency-injection-wcf/3011473#3011473 –
Какая польза от привязки завода вместо интерфейса прокси? Вы имеете в виду, что с помощью фабрики вы можете поместить прокси-сервер в блок, верно? Моя проблема заключается в том, что прокси wcf не должны использоваться при использовании блоков: http://stackoverflow.com/questions/573872/what-is-the-best-workaround-for-the-wcf-client-using-block-issue и я не могу заставить всех своих клиентов задуматься над написанием правильного кода. – empi
Вы всегда можете украсить реальную реализацию оболочкой IDisposable, которая правильно закрывает клиента в методе Dispose. Это позволит вам использовать прокси-интерфейс в используемом блоке и безопасно закрыть его. –