【问题标题】:get singleton instance获取单例实例
【发布时间】:2012-04-12 09:16:46
【问题描述】:

我正在测试 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内核表单代码?

【问题讨论】:

    标签: .net dependency-injection ninject ioc-container


    【解决方案1】:

    你必须配置类是单例:

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

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

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

    【讨论】:

    • 能否请您发布代码如何在构造函数中获取类的实例?非常感谢您的帮助。
    • 只需将其添加为构造函数参数。
    • 我在使用这个实现时遇到的一个问题是,如果我在抽象类中添加这样的构造函数,派生类也需要相同的构造函数,有时这会带来问题。
    【解决方案2】:

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

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

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

    【讨论】:

    • 创建一个全局范围的单例非常困难,我认为这也不是他们所追求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多