我花了很多时间来理解ioc。我永远不明白在这种模式中如何完全控制。即使我对反转的确切含义感到困惑。在正常的英语 - 倒置是一些像倒车,比如倒杯。
如果我将依赖注入视为Ioc。我想知道这里的控制器究竟在哪里。我在DI中理解,依赖是在构造函数,setter ........
的帮助下从外部实体插入的但是我从来不知道控制在这里被颠倒了......
任何帮助表示感谢。
答案 0 :(得分:5)
旧式:
Class car
{
Engine _engine;
Public Car()
{
_engine = new V6();
}
}
反转:
Class car
{
Engine _engine;
Public Car(Engine engine)
{
_engine = engine;
}
}
var car = new Car(new V4());
来电者有控制而不是汽车类
答案 1 :(得分:2)
依赖注入会反转控制。
例如,汽车类需要引擎类。发动机可以是任何类型的发动机。
如果您不使用DI,汽车类将确定发动机类型本身,汽车类是在控制中。
当使用DI时,实例化汽车的代码将决定汽车的类型(例如通过在构造函数中指定引擎),调用代码现在处于控制状态。控制从汽车类转换为调用代码。
答案 2 :(得分:0)
扩展罗宾的答案:
IUserRepository _user = new UserRepository();
//you're in control of which instance is created.
使用依赖注入:
IUserRepository _user;// you will not do anything else.
根据其他地方的配置,您使用的依赖注入框架将负责为您创建正确的实例。这是从代码中反转的控件。您不是直接从代码中创建任何实例。
为什么!?你为什么要这样做?
测试的一个主要优点是,当您运行测试时,您可以使用假的IUserRepository
进行配置。