2016-07-14 46 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