Questions tagged «dependency-injection»

通过动态地将其需要起作用的依赖项注入软件组件来减少组件之间的耦合的设计模式。

9
如何避免依赖注入构造函数的疯狂?
我发现我的构造函数开始看起来像这样: public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... ) 不断增加的参数列表。由于“容器”是我的依赖项注入容器,所以为什么我不能这样做: public MyClass(Container con) 每堂课?不利之处是什么?如果执行此操作,则感觉就像我在使用精美的静态方法。请分享您对IoC和依赖注入疯狂的想法。

17
如何将属性值注入使用注解配置的Spring Bean中?
我有一堆Spring bean,它们是通过注释从类路径中拾取的,例如 @Repository("personDao") public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao { // Implementation omitted } 在Spring XML文件中,定义了一个PropertyPlaceholderConfigurer: <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="/WEB-INF/app.properties" /> </bean> 我想将app.properites的属性之一注入到上面显示的bean中。我不能简单地做这样的事情 <bean class="com.example.PersonDaoImpl"> <property name="maxResults" value="${results.max}"/> </bean> 因为PersonDaoImpl在Spring XML文件中没有功能(它是通过注释从类路径中拾取的)。我有以下内容: @Repository("personDao") public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao { @Resource(name = "propertyConfigurer") protected void setProperties(PropertyPlaceholderConfigurer ppc) …


23
将Mockito模拟注入Spring bean
我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过使用@Autowired在私有成员字段上注释来。 我已经考虑过使用 ReflectionTestUtils.setField但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模拟程序,并且自动装配失败: <bean id="dao" class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.package.Dao" /> </bean> 我当前遇到的错误如下: ... Caused by: org...NoSuchBeanDefinitionException: No matching bean of type [com.package.Dao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: { @org...Autowired(required=true), @org...Qualifier(value=dao) } at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901) at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770) 如果将constructor-arg值设置为无效值,则启动应用程序上下文时不会发生错误。

4
依赖注入(DI)“友好”库
我正在考虑C#库的设计,该库将具有几个不同的高级功能。当然,这些高级功能将尽可能使用SOLID类设计原则来实现。这样,可能会有旨在供消费者定期直接使用的类,以及作为那些更常见的“最终用户”类的依赖的“支持类”。 问题是,设计库的最佳方法是什么: DI不可知-尽管为一个或两个常见的DI库(StructureMap,Ninject等)添加基本的“支持”似乎是合理的,但我希望消费者能够将库与任何DI框架一起使用。 非DI可用-如果库的使用者不使用DI,则该库仍应尽可能易于使用,从而减少用户创建所有这些“不重要”依赖项而要做的工作量。他们想要使用的“真实”类。 我当前的想法是为常见的DI库提供一些“ DI注册模块”(例如,StructureMap注册表,Ninject模块)以及非DI的set或Factory类,并包含与这几个工厂的耦合。 有什么想法吗?

21
我需要在NodeJS中进行依赖注入,还是要处理……?
我目前正在使用nodejs创建一些实验项目。我已经用Spring编写了很多Java EE Web应用程序,并赞赏那里的依赖注入的简易性。 现在我很好奇:如何使用节点进行依赖注入?或者:我什至需要它吗?是否存在替代概念,因为编程风格不同? 到目前为止,我在谈论简单的事情,例如共享数据库连接对象,但是我还没有找到一个令我满意的解决方案。

5
如何解释对5岁孩子的依赖注射?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 有什么好的方法解释依赖项注入? 我在Google上找到了几本教程,但是都没有一个假定读者只是Java初学者。您将如何向新手解释?

19
ASP.NET Core依赖注入错误:尝试激活时无法解析类型的服务
我创建了一个.NET Core MVC应用程序,并使用依赖注入和存储库模式将存储库注入到控制器中。但是,我得到一个错误: InvalidOperationException:尝试激活“ WebApplication1.Controllers.BlogController”时,无法解析“ WebApplication1.Data.BloggerRepository”类型的服务。 模型(Blog.cs) namespace WebApplication1.Models { public class Blog { public int BlogId { get; set; } public string Url { get; set; } } } DbContext(BloggingContext.cs) using Microsoft.EntityFrameworkCore; using WebApplication1.Models; namespace WebApplication1.Data { public class BloggingContext : DbContext { public BloggingContext(DbContextOptions<BloggingContext> options) : base(options) { …

10
传递参数JavaFX FXML
如何将参数传递给javafx中的辅助窗口?有没有办法与相应的控制器通信? 例如:用户从中选择一个客户,TableView然后会打开一个新窗口,显示该客户的信息。 Stage newStage = new Stage(); try { AnchorPane page = (AnchorPane) FXMLLoader.load(HectorGestion.class.getResource(fxmlResource)); Scene scene = new Scene(page); newStage.setScene(scene); newStage.setTitle(windowTitle); newStage.setResizable(isResizable); if(showRightAway) { newStage.show(); } } newStage将是新窗口。问题是,我找不到一种方法来告诉控制器在哪里寻找客户的信息(通过将id作为参数传递)。 有任何想法吗?

5
什么是温莎城堡,为什么我要关心?
我是Windows的长期开发人员,对win32和早期COM有所了解。自2001年以来,我一直在使用.NET,所以我精通C#和CLR。在开始参与Stack Overflow之前,我从未听说过温莎城堡。我已经阅读了温莎城堡的“入门”指南,但没有点击。 教这只老狗新的花样,并告诉我为什么我应该将Castle Windsor集成到我的企业应用程序中。


14
通过构造函数或属性设置器进行依赖注入?
我正在重构一个类,并为其添加新的依赖关系。该类当前正在构造函数中使用其现有的依赖项。因此,为了保持一致性,我将参数添加到构造函数中。 当然,有一些子类,甚至还有更多用于单元测试的子类,所以现在我正在玩改变所有构造函数以匹配的游戏,并且这需要很长时间。 它使我认为,将属性与setter一起使用是获取依赖项的更好方法。我不认为注入的依赖关系应该是构造类实例的接口的一部分。您添加了一个依赖项,现在所有用户(子类以及直接实例化您的任何人)突然都知道了。感觉就像封装的破坏。 这似乎不是此处现有代码的模式,因此我希望了解什么是一般共识,即构造函数与属性的优缺点。使用属性设置器更好吗?

5
是否存在用于初始化通过DI容器创建的对象的模式
我试图让Unity来管理对象的创建,并且我想拥有一些直到运行时才知道的初始化参数: 目前,我唯一想到的方法是在接口上使用Init方法。 interface IMyIntf { void Initialize(string runTimeParam); string RunTimeParam { get; } } 然后要使用它(在Unity中),我会这样做: var IMyIntf = unityContainer.Resolve<IMyIntf>(); IMyIntf.Initialize("somevalue"); 在这种情况下,runTimeParam将在运行时根据用户输入确定参数。此处的普通情况只是返回的值,runTimeParam但实际上,参数将类似于文件名,而initialize方法将对文件进行处理。 这会产生许多问题,即该Initialize方法在界面上可用并且可以多次调用。在实现中设置标志并在重复调用时引发异常Initialize似乎很麻烦。 在我解析界面的那一刻,我不想了解任何有关的实现IMyIntf。不过,我真正想要的是该接口需要某些一次性初始化参数的知识。有没有一种方法可以用此信息注释(属性?)接口,并在创建对象时将其传递给框架? 编辑:描述了更多界面。


3
可以在Angular.js中将哪些“事物”注入到其他事物中?
我在理解Angular中的依赖注入方面有些困难。所以我的问题是,任何人都可以解释我们可以注入到其他“类型”(如控制器,工厂,提供者等)中吗,包括相同“类型”的其他实例? 我实际上正在寻找的是这张桌子,上面填满了y / n。对于具有相同行/列的单元格,这意味着将一个“类型”的值注入另一个具有相同“类型”的值 +----------------+----------+------------+-----------+---------+--------+----------+---------+-------+ | Can we inject? | Constant | Controller | Directive | Factory | Filter | Provider | Service | Value | +----------------+----------+------------+-----------+---------+--------+----------+---------+-------+ | Constant | | | | | | | | | | Controller | | | | | | | | | | …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.