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);
    }
}

我有两个问题

1.这是获取单例类实例的正确方法吗?

 kernel.Get<TestSingletonInjectionClass>()

2.如何从应用代码中获取单例实例类。在测试方法中,我创建 Ninject Kernel 并访问 Get 方法。如何访问ninject内核表单代码?

4

2 回答 2

5

您必须将类配置为单例:

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

在实现中,您可以通过将其传递给消费类的构造函数来获取它。

public class Foo
{
    public Foo(TestSingletonInjectionClass testSingletonInjectionClass)
    {
        this.testSingletonInjectionClass = testSingletonInjectionClass;
    }
}
于 2012-04-12T15:04:54.677 回答
0

正如您在 ninject 文档 (https://github.com/ninject/ninject/wiki/Object-Scopes) 上所读到的,“InSingletonScope”创建了一种“单例生活方式”,而不是传统的单例。文档说:

“只会创建该类型的一个实例,并且为每个后续请求返回相同的实例。”

这意味着您将只有一个实例 x 容器。如果有人使用另一个容器,将获得另一个实例。

于 2012-04-13T08:18:24.170 回答