Tag: dependency injection

依赖地狱 – 如何将依赖关系传递给深度嵌套的对象?

这里是一个通用的想象的例子,弥补了这个职位。 考虑6个class级 TableFactory, TableData, TableCRUD, TableSchema, DBConnect, Logger. TableFactory是外部类,假设它拥有一个DB表的TableData对象。 在这个TableFactory ,不存在对TableSchema或DBConnect或logger调用。 我的目标是在外部范围内不需要的内部对象的例子。 TableData是内部读取和操作的数据,所以它需要TableCrud , DBConnect和Logger 。 TableCrud包含TableSchema并需要DBConnect和Logger 。 DbConnect itseld,使事情变得有趣,需要一个logging器。 我的例子现在是3个范围深。 我的问题是非常简单的,如果你有一个对象3(或更多)范围内的外部范围的对象没有调用,如何将这些对象从外部发送到内部范围而不会破坏接口分离原则 – > TableFactory shouldn不必处理内部对象所需的DBConnect或Logger。 如果一个人遵守基本的面向对象的原则,并且为了易于testing而devise – >你将有外部对象需要注入这5个对象,然后有一个getter方法来把这些对象所需要的东西传递到链上。 而内部作用域对象又需要注入它们内部的3范围深度对象的依赖关系,也需要注入这些对象的getters。 这使得外部作用域对象需要很多的依赖,而getter只是传递这些依赖关系。 除了这种传递物体的方法,还有其他的方法吗? 请分享! 任何链接/评论赞赏。

dependency injection和单例devise模式

我们如何确定何时使用dependency injection或单例模式。 我读了很多网站,他们说:“使用dependency injection单身模式”。 但是我不确定我是否完全同意他们。 对于我的中小规模项目,我绝对可以看到直接使用单例模式。 例如logging器。 我可以使用Logger.GetInstance().Log(…)但是,而不是这个,为什么我需要注入我创build的每个类,logging器的实例?

如何在简单的PHP函数中使用“dependency injection”,我应该打扰吗?

我听到人们总是谈论dependency injection和它的好处,但我并不是很了解它。 我想知道如果这是“我作为参数始终传递数据库连接”的问题的解决scheme。 我尝试阅读维基百科的条目,但是这个例子是用Java编写的,所以我不太清楚它要澄清的区别。 ( http://en.wikipedia.org/wiki/Dependency_injection )。 我读了这个dependency injection在PHP文章( http://www.potstuck.com/2009/01/08/php-dependency-injection/ ),它的目标似乎是不传递依赖对象直接,而是为了封锁创build一个对象,并创build它的依赖关系。 不过我不确定如何在PHP函数中使用它。 此外,是下面的dependency injection,我应该打扰尝试在function上下文中进行dependency injection? 版本1 :(我创build的那种代码,但不喜欢,每天) function get_data_from_database($database_connection){ $data = $database_connection->query('blah'); return $data; } 版本2 :(不必传递数据库连接,但可能不dependency injection?) function get_database_connection(){ static $db_connection; if($db_connection){ return $db_connection; } else { // create db_connection … } } function get_data_from_database(){ $conn = get_database_connection(); $data = $conn->query('blah'); return $data; } […]

spring:为什么我们自动装入界面而不是实现的类?

例 interface IA { public void someFunction(); } @Resource(name="b") class B implements IA { public void someFunction() { //busy code block } public void someBfunc() { //doing b things } } @Resource(name="c") class C implements IA { public void someFunction() { //busy code block } public void someCfunc() { //doing C things } } class […]

在Angular.js中可以注入什么“东西”?

我很难理解Angular中的dependency injection。 所以我的问题是,任何人都可以解释哪些“types”,如控制器,工厂,提供者等我们可以注入到其他人,包括其他相同的“types”的实例吗? 我真正想要的是这个表格填写y / n。 对于具有相同行/列的单元格,这意味着将一个“types”的值注入另一个具有相同“types” +—————-+———-+————+———–+———+——–+———-+———+——-+ | Can we inject? | Constant | Controller | Directive | Factory | Filter | Provider | Service | Value | +—————-+———-+————+———–+———+——–+———-+———+——-+ | Constant | | | | | | | | | | Controller | | | | | | | | | | Directive | […]

如何解释dependency injection到一个5岁?

什么是解释dependency injection的好方法? 我在Google上find了几个教程,但是没有一个会假设读者只是一个Java初学者。 你如何解释这个新手?

简单的注射器无法注入Web API控制器中的依赖项

我试图做一些基本的构造函数DI与简单的注入器,似乎无法解决Web API控制器的依赖关系。 我有一个“API”文件夹,这是“控制器”文件夹之外的API控制器。 我也尝试把它放在“控制器”文件夹,但似乎没有多大的区别。 我收到的堆栈跟踪与此问题中提供的相似。 我正在使用“Simple Injector MVC集成快速入门”NuGet软件包(第2.1.0版)的全新安装。 我从文档中获得了基本的SimpleInjectorWebApiDependencyResolver ,这与在这里find的一样。 我正在使用entity framework,并已查看有关正确加载上下文的更改的讨论线程 。 这似乎不是一个问题,但我仍然收到以下错误: types“MyProject.API.ArticleController”没有默认的构造函数 System.ArgumentException在 System.Web.Http.Internal.TypeActivator.Create [TBase](typesinstanceType)在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage请求,Type控制器types)System.Linq.Expressions.Expression.New ,Func`1&activator)在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,typescontrollerType) 如果有人能提供一些build议,请问是否应该修改其当前状态/呼叫顺序。 ArticleController(基本结构): public class ArticleController : ApiController { private readonly IArticleRepository articleRepository; private readonly IUserRepository userRepository; private readonly IReleaseRepository releaseRepository; public ArticleController(IArticleRepository articleRepository, IUserRepository userRepository, IReleaseRepository releaseRepository) { this.articleRepository = articleRepository; this.userRepository = userRepository; this.releaseRepository […]

春季Autowiring类与界面?

我有这个springconfiguration: <bean id="boo" class="com.x.TheClass"/> TheClass类实现TheInterface 。 然后我有这个(假设的)Java代码: @Autowired TheInterface x; @Autowired TheClass y; TheInterface的自动TheInterface工作,但TheInterface的自动TheClass失败。 Spring给了我一个NoSuchBeanDefinitionException的类。 为什么你可以连接界面而不是class级?

Spring @Autowired如何工作

我遇到了@Autowired的例子 public class EmpManager { @Autowired private EmpDao empDao; } 我很好奇empDao如何设置,因为没有setter方法,它是私人的。

将数据注入到WCF服务

我有像Miguel Castrobuild议的WCF服务。 这意味着我已经手动设置了一切,并有一个控制台应用程序托pipe我的服务使用ServiceHost对象。 我想保持我的服务类的精简,他们目前只是将调用传递给行为类。 我现在的问题是unit testing服务类。 我想注入一些东西作为一个构造参数的类,我可以嘲笑这一点,并写出适当的隔离unit testing。 ServiceHost类似乎不接受参数,所以我的问题是如何可以将数据注入服务类 – 或者我不能?