2

Ninjectをテストしていて、リポジトリをシングルトンクラスに注入する方法を理解しようとしています。以下は、作業リポジトリとシングルトンクラスの例です...

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()
    {

    }
}

合格した試験方法

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

        Assert.IsNotNull(testSingletonInjectionClass);
    }
}

2つの質問があります

1.これはシングルトンクラスインスタンスを取得するための正しいメソッドですか?

 kernel.Get<TestSingletonInjectionClass>()

2.アプリコードからシングルトンインスタンスクラスを取得する方法。テストメソッドでは、Ninject Kernelを作成し、Getメソッドにアクセスします。ninjectカーネルフォームコードにアクセスする方法は?

4

2 に答える 2

0

ninject のドキュメント (https://github.com/ninject/ninject/wiki/Object-Scopes) で読めるように、「InSingletonScope」は従来のシングルトンではなく、「シングルトン スタイル オブ ライフ」を作成します。ドキュメントには次のように記載されています。

「そのタイプの単一のインスタンスのみが作成され、後続の各リクエストに対して同じインスタンスが返されます。」

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

于 2012-04-13T08:18:24.170 に答える