15
依赖注入和服务定位器模式之间有什么区别?
两种模式似乎都是控制反转原理的一种实现。也就是说,对象不应该知道如何构造其依赖项。 依赖注入(DI)似乎使用构造函数或setter来“注入”它的依赖项。 使用构造函数注入的示例: //Foo Needs an IBar public class Foo { private IBar bar; public Foo(IBar bar) { this.bar = bar; } //... } Service Locator似乎使用了一个“容器”,它连接了它的依赖项并给foo它的标志。 使用服务定位器的示例: //Foo Needs an IBar public class Foo { private IBar bar; public Foo() { this.bar = Container.Get<IBar>(); } //... } 因为我们的依赖关系只是对象本身,所以这些依赖关系具有依赖关系,后者甚至具有更多的依赖关系,依此类推。因此,控制容器(或DI容器)的反转诞生了。示例:温莎城堡,Ninject,结构图,弹簧等) 但是,IOC / …