Tag: dependency injection

Autofac – InstancePerHttpRequest与InstancePerLifetimeScope

两个范围有什么区别? 我在每个层(存储库,服务,MVC应用程序)build立Module (s),但为了有InstancePerHttpRequest您需要Autofac.Mvc程序集。 我应该在我的Repository和Service层中使用哪个范围?

没有“开关”语句的策略模式?

我一直在阅读战略模式,并有一个问题。 我已经在下面实现了一个非常基本的控制台应用程序来解释我在问什么。 我已经读到,在实施战略模式时,“切换”语句是一个红旗。 然而,在这个例子中,我似乎无法摆脱开关语句的束缚。 我错过了什么吗? 我能够从铅笔删除逻辑,但我的主现在有一个switch语句。 我明白,我可以轻松地创build一个新的TriangleDrawer类,而不必打开铅笔类,这是很好的。 但是,我需要打开Main,以便知道将哪种types的IDrawer传递给铅笔 。 这只是如果我依靠用户input需要做什么? 如果没有switch语句的话,我很乐意看到它! class Program { public class Pencil { private IDraw drawer; public Pencil(IDraw iDrawer) { drawer = iDrawer; } public void Draw() { drawer.Draw(); } } public interface IDraw { void Draw(); } public class CircleDrawer : IDraw { public void Draw() { Console.Write("()\n"); } […]

“控制倒置”,“依赖倒置”与“解耦”的区别

我正在读关于依赖倒置和解耦的理论,我看不出两者之间的区别。 依赖倒置说到解耦function组件,以便更高层的组件不依赖于更低层的组件。 脱钩谈论同样的事情,以及如何实现它。 但是,我们有IoC容器 ,更糟的是, 为什么不把它们称为依赖性反转容器,或者更好的dependency injection容器 ,因为它们提供独立组件的运行时耦合? 然后我们有控制反转 。 这与依赖倒置基本上是一样的吗? 为什么有三个术语描述相同的事物? 还是我瞎了? 三者有什么区别? IoC在IoC容器中必须做什么?

Guice和属性文件

有没有人有一个如何使用谷歌Guice从.properties文件注入属性的例子。 有人告诉我,当喷油器启动时,Guice能够validation所有需要的特性。 在这个时候,我无法在Guice wiki上find任何关于这个的东西。

如何理解松耦合应用程序中的大局?

我们一直在使用松耦合和dependency injection开发代码。 很多“服务”风格的类有一个构造函数和一个实现接口的方法。 每个单独的课程都很容易理解。 但是,由于耦合的松散,查看课程并不能告诉你周围的课程或者它适合放大图片的地方。 使用Eclipse跳转到协作者并不容易,因为您必须通过接口进行操作。 如果界面是可运行的,那么对于find哪个类实际插入没有任何帮助。实际上,有必要回到DI容器定义,并尝试从那里解决问题。 以下是一个从dependency injection服务类的代码行: // myExpiryCutoffDateService was injected, Date cutoff = myExpiryCutoffDateService.get(); 这里的耦合尽可能松散。 到期date以任何方式字面上实施。 以下是在一个更加耦合的应用程序中可能看起来像什么。 ExpiryDateService = new ExpiryDateService(); Date cutoff = getCutoffDate( databaseConnection, paymentInstrument ); 从紧密耦合的版本,我可以推断,截止date是由支付工具使用数据库连接以某种方式确定。 我发现第一种风格的代码比第二种风格的代码更难理解。 你可能会争辩说,在阅读这门课时,我不需要知道截止date是如何计算出来的。 确实如此,但是如果我正在缩小一个bug或者确定增强需要插入的位置,那么这是非常有用的信息。 有谁遇到这个问题? 你有什么解决scheme? 这只是一些适应? 是否有任何工具可以让class级连线的方式可视化? 我应该让课程更大还是更融合? (有意留下这个问题容器不可知的,因为我有兴趣在任何答案)。

如何在控制器中注入dynamic依赖

我仍然是Angularjs的一个新手。 我想dynamic地注入一个服务(我创build的)的依赖项在我的控制器中。 但是,当我编码与依赖关系的服务,我得到这个错误: 错误:未知提供者:$ windowProvider < – $ window < – base64 这是控制器的代码。 var base64 = angular.injector(['servicesModule']).get('base64'); console.log("base64", base64.encode("my text will be encoded")); 此代码工作: var servicesModule = angular.module('servicesModule', []); servicesModule.factory('base64', function() { return { name: 'base64', readonly: false, encode: function(input) { return window.btoa(input); }, decode: function(input) { return window.atob(input); } }; }); 此代码不起作用: var extModule […]

Pythondependency injection框架

是否有与Guice( http://code.google.com/p/google-guice )for Python相同的框架?

注入和资源和自动assembly注释

@Inject和@Resource和@Autowired注释之间有什么区别? 我们应该什么时候使用它们?

了解IoC容器和dependency injection

快速前进: 我写这个的目的是为了更好地理解dependency injection和IoC容器,也是为了以后我可以纠正它的错误,并用它来帮助我的几个朋友教他们。 到目前为止,我已经尝试阅读各种框架(laravel,fuel,codeigniter,symfony)的文档,我发现框架有太多不同的方面,我需要使用它,我决定尝试在尝试在框架中使用它们之前,先自己学习每个主要部分。 我花了几个小时search各种各样的意思,看着stackoverflow响应,并阅读各种文章试图了解什么是IoC,以及如何使用它来正确pipe理依赖关系,我相信我明白它在概念上是什么,但我仍然灰色关于如何正确实施。 我认为读这本书帮助我的最好方法是给出我目前对IoC容器和dependency injection的理解,然后让那些比我更好理解的人指出我的理解力不足。 我的理解: 依赖关系是当ClassA的实例需要ClassB的实例来实例化ClassA的新实例时。 dependency injection是当ClassA通过ClassB的构造函数中的参数或通过set〜DependencyNameHere〜(〜DependencyNameHere〜$ param)函数传递ClassB的实例时。 (这是我不完全确定的领域之一) 。 一个IoC容器是一个单例类(在任何给定的时间只能有一个实例实例化),在这里可以注册实例化这个类的对象的具体方法。 下面是我想要描述的一个例子的链接,以及我一直使用的IoC容器的类定义 所以在这一点上,我开始尝试使用IoC容器更复杂的情况。 到目前为止,似乎为了使用IoC容器,我仅限于几乎所有我想创build的具有IoC容器中定义的依赖关系的类的关系。 如果我想创build一个inheritance一个类的类,但是只有在以IoC容器中注册的特定方式创build父类的情况下。 例如:我想创build一个mysqli的子类,但是我想在IoC容器中注册这个类,只用我之前在IoC容器中注册的方式实例化父类。 我想不出没有重复代码的方法(因为这是一个学习项目,我试图尽量保持它的“纯”)。 以下是我想描述的更多的例子。 所以这里是我的一些问题: 我想尽量做到不违反OOP原则? 我知道在c + +我可以使用dynamic内存和复制构造函数来完成它,但我一直无法在PHP中find这种function。 (我会承认,除了__construct之外,使用其他任何魔术方法的经验都很less,但是如果我理解正确的话,可以从阅读和__clone中获得,我不能在构造函数中使用它来实例化子类,父类的实例)。 我的所有依赖类定义应该在哪里与IoC相关? (我的IoC.php应该在顶部有一堆require_once('dependencyClassDefinition.php')吗?我的直觉反应是有更好的方法,但我还没有拿出一个) 我应该在什么文件注册我的对象? 目前在类定义之后,在IoC.php文件中完成对IoC :: register()的所有调用。 在我注册一个需要依赖关系的类之前,是否需要在IoC中注册依赖关系? 由于我没有调用匿名函数,直到我真正实例化了一个在IoC中注册的对象,我猜不到,但它仍然是一个问题。 还有什么我可以忽略,我应该做的或使用? 我试图一次一个脚印,但我也不想知道我的代码是可重用的,最重要的是,对我的项目一无所知的人可以阅读并理解它。 我知道这是非常长的,只是想提前感谢任何花时间阅读的人,甚至更愿意分享他们的知识。

在Rails中是否存在dependency injection?

Rails是否具有MVC方法的事实意味着dependency injection? 还是有一个原因,我们不谈论在Rails的dependency injection? 如果Rails确实有dependency injection,它是由什么组成的?