我应该对Web服务客户端使用using语句或依赖注入

时间:2014-04-04 15:56:49

标签: c# asp.net web-services dependency-injection

我最近写了一些涉及Soap Web服务调用的代码。

以下示例代码完全正常。唯一的问题是我无法对代码进行单元测试,因为我使用'声明。我可以使用基于构造函数的依赖注入使用MS Unity依赖注入器。

问题是我是否会为此使用依赖注入器。使用'使用'的原因声明是我想在方法调用之后处理对象。

private ResultSet GetLookupMailingData()
    {
        try
        {
            using (var client = new NDataAccessSoapClient())
            {
                var result = client.GetLookupData(XMLLookupDataTypes.xldtMailings, "");
                return Deserialize<ResultSet>(result);
            }
        }
        catch (Exception)
        {
            return new ResultSet();
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以使用注入的工厂。因此,您可以模拟工厂返回模拟客户端并设置期望。例如:

interface INDataAccessSoapClientFactory
{
    NDataAccessSoapClient CreateClient();
}

class Lookup
{
    private INDataAccessSoapClientFactory factory;

    public Lookup(INDataAccessSoapClientFactory factory)
    {
        this.factory = factory;
    }

    private ResultSetGetLookupMailingData()
    {
        try
        {
            using (var client = factory.CreateClient())
            {
                var result = client.GetLookupData(XMLLookupDataTypes.xldtMailings, "");
                return Deserialize<ResultSet>(result);
            }
        }
        catch (Exception)
        {
           return new ResultSet();
        }
    }
}