【发布时间】:2011-03-16 22:51:07
【问题描述】:
我正在与只有静态函数的 API 交互,无法打开和更改。
public class WindowsNativeGraphAPI
{
public static IEnumerable<IGraphData> GetGraphData();
public static bool DeleteGraphData(IGraphData data);
}
我希望能够将 API 传递到函数或构造函数中并遵守依赖注入(以防我们稍后更换 API)。
public void GatherGraphData(IGraphAPI api)
{...}
为了允许这个 API 作为参数传入,我至少需要抽象以使用接口传递给函数。
public interface IGraphAPI
{
IEnumerable<IGraphData> GetGraphData();
bool DeleteGraphData(IGraphData data);
}
但是,我需要在另一个类中实现接口,因为我无法更改原始 API。此类将是 API 的轻量级包装器,它只调用 API 上的相应函数并返回相同的结果。
public class WindowsGraphAPI : IGraphAPI
{
public IEnumerable<IGraphData> GetGraphData()
{
return WindowsNativeGraphAPI.GetGraphData();
}
public bool DeleteGraphData(IGraphData data)
{
return WindowsNativeGraphAPI.DeleteGraphData(data)
}
}
我不喜欢创建另一个类来包装 API 的想法。我知道这个包装器会非常轻量级并且只会返回 API 的结果,但是我该如何测试包装器呢?包装器可能还应该包含一些异常处理来处理 API 中的错误。如果我们要更改为遇到同样问题的另一个 API,我们将不得不再次创建这些额外的类和接口。
理想情况下,最终结果将是一个可模拟的 API,可以在为使用它的新组件编写单元测试时使用。
这是正确的方法吗?可以换一种方式吗?
谢谢
【问题讨论】:
标签: c# .net dependency-injection wrapper static-methods