我有一个面试问题大致提到以下问题:依赖注入,你如何防止所有类被实例化?如果你只想要一些但不是全部怎么办?他们说,有充分的理由,例如为了避免它们同时存在于记忆中......
我试图研究这个问题,但很难找出最好的搜索词。我找不到答案。
答案 0 :(得分:1)
一种简单的方法是使用构造函数创建它,并基于标志或开关实例化单个类。这是一个简单的示例,显示只会实例化一个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();
}