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

本文关键字:依赖 注入 语句 服务 客户端 我应该 Web | 更新日期: 2023-09-27 17:56:34

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

下面的示例代码完美运行。 唯一的问题是我无法使用"using"语句对代码进行单元测试。我可以使用MS Unity依赖注入器使用基于构造函数的依赖注入。

问题是我是否应该为此使用依赖注入器。使用"Using"语句的原因是我想在调用方法后处理对象。

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

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

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

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();
        }
    }
}