如何通过依赖注入来防止类实例化
本文关键字:实例化 何通过 依赖 注入 | 更新日期: 2023-09-27 18:18:22
我有一个面试问题,问题大致如下:使用依赖注入,如何防止所有类被实例化?如果你只想要一些,而不是全部呢?他们说,有很好的理由,例如避免它们同时在内存中…
我试着研究这个问题,但很难找出最好的搜索词是什么。我找不到答案。
一种简单的方法是使用构造函数创建它,并基于标志或开关实例化单个类。下面是一个简单的示例,显示只有单个OtherClass
或OtherClass2
将被实例化。
我想补充的是,它不是真正的依赖注入,允许防止实例化。您可以摆脱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();
}