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

本文关键字:实例化 何通过 依赖 注入 | 更新日期: 2023-09-27 18:18:22

我有一个面试问题,问题大致如下:使用依赖注入,如何防止所有类被实例化?如果你只想要一些,而不是全部呢?他们说,有很好的理由,例如避免它们同时在内存中…

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

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

一种简单的方法是使用构造函数创建它,并基于标志或开关实例化单个类。下面是一个简单的示例,显示只有单个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();
}