如何将第三方库实例与结构图集成

How to Integrate third party library instances with structure Map

有没有人试过用结构图来管理他们的第三方实例?

很长一段时间以来,我管理第三方库的方法一直是围绕库编写一个包装器 api。

我面临的困境是如何利用结构映射的依赖注入优势,同时我仍然要保留我对第三方库的包装。

例如,如果我有一个 LibraryClass 并且我有我的 class WrapperClass。我的包装器构造函数如下所示。

    class WrapperClass : IWrapperClass{
       var instance;
       public WrapperClass(){
            instance = new LibrayClass();
       }
    }

这个问题是无论我在代码中使用它的什么地方,我都无法模拟这个对象,因为结构图需要访问 LibraryClass 类型才能加载 WrapperClass。

人们为此做了什么?我是否应该只将 LibraryClass 类型暴露给结构图,然后希望它会通过结构图加载?

每当我需要注入第三方依赖项时,我都会用一个接口将其包装起来。我没有将对象公开为实例,而是尝试在包装器上公开底层对象的功能。例如,给定 AmazonS3,包装器 class 可能类似于

class FileStorage : IFileStorage
{
    private AmazonS3 _amazon;
    public FileStorage(AmazonS3 amazon) { _amazon = amazon }
    void StoreFile(string file, string key)
    {
            _amazon.StoreFile(file, key);
    }
}

然后您可以将 IFileStorage 注入您的 class,因为它是一个接口,您可以模拟 class 进行测试。

然后您注册第三个库 class 输入您的结构图配置。