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