问题标签 [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 投票
6 回答
4034 浏览

dependency-injection - 对具有许多依赖项的类使用依赖注入框架

我一直在研究 .NET 的各种依赖注入框架,因为我觉得我正在从事的项目将从中受益匪浅。虽然我认为我很好地掌握了这些框架的功能,但我仍然不清楚如何最好地将它们引入大型系统。大多数演示(可以理解)往往是具有一两个依赖项的非常简单的类。

我有三个问题...

首先,您如何处理那些常见但无趣的依赖关系,例如 ILog、IApplicationSettings、IPermissions、IAudit。每个类都在其构造函数中将这些作为参数似乎有点过头了。在需要时使用 DI 容器的静态实例来获取它们会更好吗?

其次,您如何处理可能使用但创建成本可能很高的依赖项。示例 - 一个类可能依赖于 ICDBurner 接口,但不希望创建具体实现,除非实际使用了 CD 刻录功能。您是在构造函数中将接口传递给工厂(例如 ICDBurnerFactory),还是再次采用某种静态方式直接进入 DI 容器并在需要时请求它?

第三,假设您有一个大型 Windows 窗体应用程序,其中顶级 GUI 组件(例如 MainForm)可能是数百个子面板或模式窗体的父级,每个子面板或模式窗体可能有多个依赖项。这是否意味着应该将 MainForm 设置为将其所有子项的所有依赖项的超集作为依赖项?如果你这样做了,这最终会不会创建一个巨大的自膨胀怪物,它会在你创建 MainForm 的那一刻构建它可能需要的每一个类,在这个过程中浪费时间和内存?

0 投票
3 回答
2502 浏览

prototype - DAO 通常应该具有哪个范围

道不会拥有任何状态,这是毫无疑问的。

但是,为了最容易地访问该类,使用原型(=每次都新建)还是单例更好?

简单的对象创建对于 dao 来说很便宜。它通常只拥有一个 sessionfactory,从单例列表中访问对象可能同样昂贵。

澄清:这个问题的重点是,如果对 daos 的范围界定有一个共同的约定。

0 投票
2 回答
3139 浏览

.net - 如何从 Castle Windsor 配置中读取/解析属性

我有很多城堡 xml 配置,其中连接字符串等属性也保存在 .Net 配置部分下。

我希望能够使用容器读取属性,但看不到执行此操作的机制。

IE

...

显然,这些属性是存在的,因为它们存在组件依赖关系。我可以解析组件,但不能解析属性。

当然,我可以新建一个组件来读取注入它的属性城堡,或者我可以将所有属性包装在一个专门用于保存名称/值对的组件中。但我会认为有一个简单的 container.resolve("property.connectionstring") 表示法。

*编辑 Markdown 不是很好,上面是一个 xml 部分。

0 投票
5 回答
8155 浏览

dependency-injection - 在方法或构造函数中注入依赖项?

依赖注入似乎是件好事。一般来说,依赖关系应该注入到需要它们的方法中,还是应该注入到类的构造函数中?

请参阅下面的示例以演示注入相同依赖项的两种方法。

0 投票
2 回答
14079 浏览

.net - 为什么 MEF 不是 DI/IoC 容器?

博客圈和微软自己都说 MEF 不是另一个 IoC 容器。

好吧……但是为什么呢?对我来说似乎是一样的。也许它不如 Unity 或Castle Windsor好,但它仍然符合定义,不是吗?

为什么 MEF 不像 Unity 或 Castle Windsor 那样是 IoC 容器?

0 投票
2 回答
471 浏览

.net - 将依赖注入到 Linq to Sql

是否有将依赖项注入到 Linq to Sql 或实体框架实体的机制?如果是这样,这将是一个明智的方法吗?

0 投票
4 回答
322 浏览

.net - DI-类型类型的动态参数,其中类型是父对象类型

我有一个依赖项,需要将其注入我的一个类中。这种依赖将是生活方式Transient。它又具有 type 的依赖关系Type。这个类型应该是原始类的类型。我只是想知道是否有人知道我将如何进行此注册。

参见示例:

现在我知道我可以随时打电话Container.ResolveCustomer然后Register手动注入。但是我需要注入Register我的大部分课程,所以这并不是那么可行。因此,我需要一种通过 config 或通过container.Register.

0 投票
1 回答
1556 浏览

c# - 如何注入 WebRequest/Response 依赖项?

我正在努力分离以下代码中的依赖项:

本质上,我想在不依赖外部网站请求的情况下进行单元测试。

解决这个问题的最佳方法是什么?

0 投票
5 回答
7398 浏览

dependency-injection - 实用单例和依赖注入问题

假设我有一个名为 PermissionManager 的类,它在我的系统中应该只存在一次,并且基本上实现了为我的应用程序中的各种操作管理各种权限的功能。现在我的应用程序中有一些类需要能够在其方法之一中检查某个权限。此类的构造函数目前是公开的,即由 API 用户使用。

直到几周前,我才会让我的班级在某处调用以下伪代码:

但是由于我注意到这里的每个人都讨厌单例+这种耦合,所以我想知道更好的解决方案是什么,因为我读到的反对单例的论点似乎是有道理的(不可测试,高耦合等)。

那么我真的应该要求 API 用户在类的构造函数中传入一个 PermissionManager 实例吗?即使我只希望我的应用程序存在一个 PermissionManager 实例?

还是我要解决这一切都错了,应该有一个非公共构造函数和一个工厂在某个地方为我传递 PermissionManager 的实例?


附加信息请注意,当我说“依赖注入”时,我指的是 DI模式……我没有使用任何 DI 框架,例如 Guice 或 Spring。(...然而)

0 投票
7 回答
2230 浏览

c# - .net 控制反转

我很少听到有人在 .Net中使用控制反转 (Ioc)原理。我有一些使用 Java 的朋友在 Spring 和 PicoContainer 中使用了更多的 Ioc。

我了解从您的代码中删除依赖项的原则......但我怀疑它是否更好。

为什么.Net 程序员不使用(或少用)那些类型的框架?如果你这样做了,从长远来看,你真的发现了积极的影响吗?