如何通过依赖注入防止类实例化?

时间:2016-11-17 01:52:45

标签: c# dependency-injection

我有一个面试问题大致提到以下问题:依赖注入,你如何防止所有类被实例化?如果你只想要一些但不是全部怎么办?他们说,有充分的理由,例如为了避免它们同时存在于记忆中......

我试图研究这个问题,但很难找出最好的搜索词。我找不到答案。

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用构造函数创建它,并基于标志或开关实例化单个类。这是一个简单的示例,显示只会实例化一个OtherClassOtherClass2

我想补充一点,它并不是真正的依赖注入,它允许防止实例化。您可以摆脱DI并且具有紧密耦合的类,并且仍然具有类的单个实例。所以也许我没有正确理解这个问题,或者面试官可能会以不同的背景/方式提出这个问题?

class AppStart
{
    OneClass One;
    int _whatToCreate = 0;

    public int WhatToCreate
    {
        get { return _whatToCreate; }
        set { _whatToCreate = value; }
    }

    public void Start()
    {
        if (_whatToCreate > 0)
        {
            One = new OneClass(new OtherClass());
        }
        else
        {
            One = new OneClass(new OtherClass2());
        }

        One.PerformSomething();
    }
}

class OneClass
{
    IDoSomething _doSomething;

    public OneClass(IDoSomething doSomething)
    {
        _doSomething = doSomething;
    }

    public void PerformSomething()
    {
        _doSomething.DoSomething();
    }
}

class OtherClass : IDoSomething
{
    public void DoSomething()
    {
        //throw new NotImplementedException();
    }
}

class OtherClass2 : IDoSomething
{
    public void DoSomething()
    {
        //throw new NotImplementedException();
    }
}

interface IDoSomething
{
    void DoSomething();
}