我和我的一位同事就依赖注射问题进行了激烈的辩论,并意识到我并不完全了解这个主题的所有事实.
所以,拿这个代码(就是你知道,我们正在使用Castle Windsor)
IPlayerService service = Container.Resolve<IPlayerService>();
Run Code Online (Sandbox Code Playgroud)
上面的代码显然是使用IoC的DI的一个例子.
但是,请参阅下面的代码(更新:假设我通过构造函数传递所有外部依赖项):
var playerClient = new PlayerClient();
var playerSkinClient = new PlayerSkinClient();
IPlayerService service = new PlayerService(playerClient, playerSkinClient);
Run Code Online (Sandbox Code Playgroud)
我的论点是上面的代码是DI模式的一个例子,DI可以在没有IoC的情况下存在.
现在,我的同事并没有完全不同意我的观点,但他说上面的代码不是涉及DI的任何模式的例子.
那么,DI可以仅用作一种模式而不需要任何额外的框架吗?
如果是这样,上面的代码是一个例子吗?
最后,定义DI模式(如果存在),没有Container的概念.
我今晚稍后会更详细地回答和评论,但感谢大家对目前为止经过深思熟虑的答案和评论!
我基本上理解IoC框架是如何工作的,但有一点我不太了解的是基于代码的配置应该如何工作.使用XML,我了解如何将新程序集添加到已部署的应用程序,然后更改XML中的配置以包含它.如果应用程序已经部署(即以某种形式编译),那么如何在不重新编译的情况下进行代码更改?或者是人们做什么,只需在代码中更改配置并重新编译?