如何公开实现接口的类并使用非托管资源?

时间:2010-06-26 14:23:24

标签: c# .net wcf dependency-injection unmanaged

我有一个关于在非托管资源发挥作用​​时使用接口的问题。 假设我有一个Web服务并生成了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?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

声明您的接口实现了IDisposable,在具体类中实现Dispose(),并且您的DI提供程序将正确处理它。如果您的DI提供商不这样做,请找一个新的。

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