2016-07-14 93 views
0

有没有人试图用结构体Map来管理他们的第三方实例?如何将第三方库实例与结构体Map集成

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

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

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

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

这样做的问题是,无论我用这个在我的代码,我不能因为结构图需要访问到LibraryClass类型以加载WrapperClass嘲笑这个对象。

人们为此做了什么?我应该只将LibraryClass类型暴露给结构映射,并希望它反过来只会通过结构映射加载?

回答

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到你的类,因为它是一个接口,你可以嘲笑这个类进行测试。

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

+0

不会结构映射抱怨AmazonS3未在结构映射对象工厂中注册? – Erion

+0

根据您的需要,您有几个选项。 ().Is(new AmazonS3) 3.在构造函数中新建AmazonS3,并将其从中移除参数列表 对于编号2,我不记得是否为构造函数创建了单例,如果你走这条路线,需要查看一下 –

+0

确定这就是我要求的,所以你确实公开第三方库类型结构图。 – Erion