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

时间:2016-07-14 15:07:23

标签: c# structuremap

有没有人尝试使用结构Map管理他们的第三方实例?

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

我面临的问题是如何利用结构图的依赖注入优势,而我仍然保留围绕第三方库的包装。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

每当我需要注入第三方依赖项时,我都会在其周围添加一个包装器。我尝试在包装器上公开底层对象的功能,而不是将对象公开为实例。例如,给定AmazonS3,包装类可能看起来像

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

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

并在结构图配置中注册第三个库类类型。