2017-08-11 17 views
1

NinjectBootstrapper類已在Service項目中創建(負責獲取產品)。 這是我的代碼改進我的NinjectBootstrapper靜態類。

public static class NinjectBootstrapper 
{ 
    private static readonly object _thislock = new object(); 

    //flag to prevent bootstrap for executing multiple times 
    private static bool _done; 

    public static void Bootstrap() 
    { 
    lock(_thislock) 
    { 
     if(_done) 
     { 
      return; 
     } 
     _done = true; 

     // services 
     NinjectContainer.Kernel.Bind<IProductService>().To<ProductService>(); 
     // repositories 
     NinjectContainer.Kernel.Bind<IProductRepository>().To<ProductRepository>(); 
    } 

    } 

} 

現在,雖然這工作,我真的想知道是否有更好的方法來重構我的代碼。比如我讀了很多關於使用單例而不是靜態類的東西。 我想真正在這裏設定一個好的基礎,使未來的開發者能夠輕鬆而靈活地擴展功能。我可以考慮哪些好的指針和提示?

回答

0

我讀過很多關於使用單例而不是靜態類的東西。

當應用DI我們通常喜歡實例類在靜態類,因爲我們不能練習靜態類構造器注入。然而,這並不意味着靜態類是不好的做法。當類沒有依賴性並且沒有狀態時,static沒問題。

這也適用於啓動路徑中的代碼,例如您的NinjectBootstrapper。你可以使它成爲一個實例類,但由於這個類是在啓動時直接啓動的,因此不需要注入依賴關係(顯然,因爲它是連接DI容器的東西),所以將它作爲實例類通常是無用的。

+0

啊謝謝你的解釋。確實,這確實在啓動時使用。謝謝你的解釋。然後,我會離開我的代碼。 –