2017-08-11 5 views
1

NinjectBootstrapperクラスは、サービスプロジェクト(製品の取得を担当)で作成されています。 これは、これは動作しますが、私は本当に私のコードをリファクタリングするためのより良い方法があるかどうかを知りたいと思い、今、私のコード私の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

説明のためにああありがとう。実際に起動時にこれが使用されていることは事実です。ご説明をいただき、ありがとうございます。私はコードをそのまま残します。 –