c# – 包装API以支持依赖注入

我正在与只具有静态功能的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,可以在为消耗它的新组件编写单元测试时使用.

这是正确的方法吗?可以用另一种方式吗?

谢谢

最佳答案
是的,这是正确的方法.新的API接口和代理类封装了要使用的底层库的决策 – 单一责任.

转载注明原文:c# – 包装API以支持依赖注入 - 代码日志