2012-04-12 9 views
2

私はNinjectをテストしており、シングルトンクラスにリポジトリを挿入する方法を理解しようとしています。以下 はsucesfullyシングルトンインスタンスを取得する

[TestMethod] 
public void SimpleTestSingleton() 
{ 
    using (IKernel kernel = new StandardKernel()) 
    { 
     kernel.Bind<ITestRepository>().To<TestRepository>(); 
     var testSingletonInjectionClass = 
      kernel.Get<TestSingletonInjectionClass>();\ 

     Assert.IsNotNull(testSingletonInjectionClass); 
    } 
} 

合格試験方法は、私は2つの質問

1.を持って

public interface ITestRepository 
{ 
    void TestRepositoryMethod(); 
} 

public class TestRepository:ITestRepository 
{ 
    public void TestRepositoryMethod() 
    { 

    } 
} 

public class TestSingletonInjectionClass 
{ 
    private readonly ITestRepository _repository; 

    public TestSingletonInjectionClass(
     ITestRepository repository) 
    { 
     _repository = repository; 
    } 

    public void TestMethod() 
    { 

    } 
} 

...リポジトリとシングルトンクラスの例を働いてもらうために、この正しい方法であり、シングルトンクラスのインスタンス?アプリのコードからシングルトンインスタンスクラスを取得する方法

kernel.Get<TestSingletonInjectionClass>() 

2.。テストメソッドでは、Ninjectカーネルを作成し、Getメソッドにアクセスします。 ninjectカーネルのフォームコードにアクセスするには?消費クラスのコンストラクタに渡すことで、あなたはそれを得るの実装では

kernel.Bind<TestSingletonInjectionClass>().ToSelf().InSingletonScope(); 

答えて

5

あなたはクラスがあるシングルトンを設定する必要があります。あなたは「InSingletonScope」ではない伝統的なシングルトン「人生のシングルトンスタイル」を、作成しninjectドキュメント(https://github.com/ninject/ninject/wiki/Object-Scopes)で読むことができたよう

public class Foo 
{ 
    public Foo(TestSingletonInjectionClass testSingletonInjectionClass) 
    { 
     this.testSingletonInjectionClass = testSingletonInjectionClass; 
    } 
} 
+0

コンストラクタでクラスのインスタンスを取得する方法を投稿してください。ご助力ありがとうございます。 – Tomas

+0

コンストラクタパラメータとして追加するだけです。 –

+0

この実装を使用して出会った1つの問題は、抽象クラスでそのようなコンストラクタを追加すると、派生クラスにも同じコンストラクタが必要になることです。 – Tomas

0

。ドキュメントには、

"タイプのインスタンスが1つだけ作成され、以降のリクエストごとに同じインスタンスが返されます。

これは、インスタンスxコンテナーが1つしかないことを意味します。誰かが別のコンテナを使用している場合は、別のインスタンスが取得されます。

+0

グローバルスコープのシングルトンを作成するのは非常に難しいです。 –

関連する問題