问题标签 [dependency-injection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
871 浏览

wpf - IoC 和用户界面

我正在尝试在我的应用程序中使用 IoC 进行依赖注入的最佳方式,但是我有一个小问题。

我在 WPF 应用程序中使用 MVP 模式的松散实现。本质上,演示者类被实例化,视图和任务(例如 EmployeePresenter 的 IEmployeeView 和 IEmployeeTask)被注入到演示者中。

我想使用 IoC 容器(我正在尝试 Unity,尽管我猜这也会发生在其他人身上,例如 ninject 或 Structure Map)而不是手动注入这些实例,但是如果演示者是创建的(或从IoC 容器)在异步委托调用或事件线程(例如非 STA 线程)上创建 WPF 窗口的新实例会引发以下异常:

当前构建操作(构建键 Build Key[ namespace .Window1, null])失败:调用线程必须是 STA,因为许多 UI 组件都需要这个。

现在,我知道新窗口实例等需要是 STA,但是即使必须在 STA 线程上创建 UI,是否可以使用 IoC 容器进行依赖注入?

从这个问题来看,被解析的类/类型似乎是在解析时实例化的,而不是在其注册时...

0 投票
6 回答
707 浏览

design-patterns - 如果在对象类型上,寻找一种设计模式来替换 huuuge

好的,所以我正在寻找一些大致如下所示的代码:

现在一种方法是让所有o用作参数的对象实现一个接口,如

但问题是我不希望我的所有对象都实现这个接口——do something 方法的逻辑并不真正属于它们。我应该使用什么模式来处理这个问题?

我怀疑类似的一系列实现

可能会更好。对于我想要执行的每个对象类型,我都有一个实现,但是我遇到了这个新问题。我有时需要一种方法

但这是否需要对其进行大规模切换?我是否应该定义一个带有大量方法的类,例如

与无法在运行时添加新类型的通用版本相比,这存在问题。有什么巧妙的方法可以用 GetPropsGeneric 中的 DI 容器来解析容器吗?谢谢!

0 投票
2 回答
4671 浏览

dependency-injection - OSGi/Felix 声明式服务:如何过滤要绑定的服务?

我正在使用 Apache Felix 及其声明式服务 (SCR) 来连接包之间的服务依赖关系。

例如,如果我需要访问 java.util.Dictionary 我可以说以下内容让 SCR 提供:

现在,我有多个可用的 Dictionary 服务,我想使用“name”服务属性(我只想要“name=myDictionary”)过滤它们。我可以使用代码(使用 ServiceTracker)来做到这一点,但我宁愿在 @scr 注释中指定过滤器。

0 投票
12 回答
19539 浏览

objective-c - Cocoa 的依赖注入框架?

Interface Builder 可用于 Cocoa 应用程序中的基本依赖注入,但是当您不想在 NIB 文件中实例化对象时,是否有人知道用于 Objective-C/Cocoa 的更完整的依赖注入框架?

编辑

澄清一下,我承认 IB 可用于基本 DI,但我正在寻找一个功能更完整的框架,包括单独的生产和测试配置,类似于 Groovy 或 Springs。

0 投票
1 回答
4539 浏览

c# - 从 Windsor Container 中删除或覆盖组件

我正在尝试完成一件看似超级简单的事情:从我的单元测试中,我想用模拟/假对象替换正在解析的类型。

例如:xml 配置声明服务 IInterface 的组件应解析为 ClassA。很好,但是从我的单元测试中,我希望类型解析为 FakeClassA。我不能为此使用 container.AddComponent,因为“已经为给定键注册了一个组件......”。

0 投票
3 回答
3600 浏览

dependency-injection - 与城堡温莎的多接口注入

当容器中有多个实现时,如何让 Castle Windsor 在运行时选择正确的接口植入。

例如,假设我有一个名为 IExamCalc 的简单界面,它可以计算某人在考试中的表现。

不,我们有几个这样的实现,例如,

假设正在通过 Windor 重新使用 ExamMarkService 我如何确保在构造函数中注入了正确的实现,这是多租户问题的一个例子吗?

希望一切都有意义

科林·G

0 投票
2 回答
2280 浏览

dependency-injection - 使用 IOC 框架绑定到多个具体实现?

我对 DI/IOC 容器的概念相对熟悉,我曾在之前已经使用它们的项目上工作过。然而,对于这个新项目,没有现有的框架,我不得不选择一个。

长话短说,在某些场景中,我们将为给定接口配置多个实现。环顾网络,似乎使用任何主流框架来选择性地绑定到其中一个实现都非常简单。

然而,在某些情况下,我们需要运行所有配置的实现。我已经在这里搜索了所有 IOC 标记的帖子,我正在尝试翻阅主要框架的文档(到目前为止,查看 Unity、Ninject 和 Windsor),但是文档通常很少,我没有时间检查所有软件包的来源。

那么,是否有任何主流 IOC 容器允许我为我的一项服务绑定到所有已配置的具体类型?

0 投票
18 回答
734303 浏览

java - 如何将属性值注入使用注释配置的 Spring Bean?

我有一堆 Spring bean,它们是通过注释从类路径中提取的,例如

在 Spring XML 文件中,定义了一个PropertyPlaceholderConfigurer

我想将 app.properites 中的属性之一注入到上面显示的 bean 中。我不能简单地做类似的事情

因为 PersonDaoImpl 在 Spring XML 文件中没有特性(它是通过注释从类路径中提取的)。我有以下几点:

但我不清楚如何访问我感兴趣的属性ppc

0 投票
1 回答
3521 浏览

asp.net-mvc - 如何在 3 层 Web 应用程序(ASP.NET MVC)中使用 Autofac?

我可以找到的示例使用两层架构,其中控制器直接使用数据访问层中的存储库类。见这里这里

如果您有使用这些组件的服务或业务逻辑层,您会在哪里注册数据访问层的组件?理想情况下,不应从用户界面层引用数据访问层,对吗?所以 Application_Start 不是正确的地方。

有什么更好的方法?

谢谢!

0 投票
1 回答
211 浏览

dependency-injection - DI 和复合组件 - 设计

我正在为系统设计一个新组件,尝试遵循有关 DI 的各种准则,以便我们在隔离、模拟等方面获得回报。

所以我有以下组件(说明为抽象):

  • Fetcher - 支持 IFetcher,它从特定数据源获取数据。返回 IDataSource。
  • Builder - 支持 IBuilder,它从 IDataSource 构建结构。

我想将它们包装在一个“Performer”(因为想要一个更好的名字)组件中,它会执行以下操作:

为了遵守 Dependency Injection 和 LoD 指南(据我所知),我同时传入了 IFetcher 和 IBuilder 组件。

我的问题 - 这听起来像一个可以接受的设计吗?与工作同事的对话是“是的,听起来不错”,但不是 100% 相信 Performer 类的封装。

在我看来,Performer 是一个复合控件,它将几个不同的组件粘合在一起,这应该是可以接受的。唯一的问号是我是否应该有一个“Performer Factory”,但考虑到可以模拟实际组件(Ifetcher 和 IBuilder),这似乎有点过分了。

任何想法将不胜感激,谢谢。