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

c# - 如何在工厂中实现构造函数注入?

当您使用工厂模式时,如何在运行时将依赖项注入构造函数?

我正在构建具有不同格式的 Foos - boolean、array、freetext、matrix 等。随着我们发现 Foo 的不同用途,该格式列表将会增长。这是我的基本核心域:

IFoo 是为消费者上下文装饰的:

我不希望我的消费者直接实例化 Foo ,所以我强迫他们使用工厂:

即使这样,他们也需要从我的抽象工厂中为他们的特定上下文派生一个工厂。

我专门在 html 上下文中构建 foos,如下所示:

我的问题出在我的抽象 FooFactory 中:我总是将一个空值列表注入到我的 ArrayFooFormat 中。我希望能够从消费者那里传递一个值列表。对于其他 FooFormats,我想从消费者那里传递正确的构造函数参数。但我想让公共 API 保持简单——我不希望 BuildFoo() 上有一堆重载。

那么如何从 HtmlFooConsumer.DoSomeFoo() 内部将自定义值列表传递给 factory.BuildFoo<T>() 调用?任何想法,stackoverflow大师?

0 投票
2 回答
238 浏览

dependency-injection - 在我的应用程序中开始使用 Castle Windsor 需要哪些程序集?

我有一个关于如何开始使用 Castle Windsor 的非常基本的问题。我已经阅读了 IOC/DI 并想在现有的解决方案中尝试 Castle Windsor。我通常喜欢将任何外部程序集放在解决方案文件夹树中的 Lib 文件夹中,以便引用是相对的(我相信这是最佳实践)。

我需要将 Castle\Bin... 文件夹中的哪些程序集复制到我的 Lib 文件夹中?我需要为每个程序集添加显式引用还是只添加其中一些?

C:\dev\oss\Castle\Bin\net-2.0 文件夹中有 30 个程序集,C:\dev\oss\Castle\Bin\Dependencies 文件夹中有 18 个程序集。

0 投票
2 回答
2268 浏览

php - 给 PHP 对象类型参数一个默认值

我正在编写一个考虑到可测试性的 PHP 应用程序,所以我的类总是在他们的构造函数中询问他们依赖的“协作对象”,就依赖注入模式而言。

这样,我就可以在我的单元测试中传递模拟或测试实现。

不过,我想要实现的是能够实例化一个具有传递给其构造函数参数的空值的类,以触发一个回退机制,该机制为每个协作者实例化一个默认实现类。

因为对象类型的参数在 PHP 中不能被赋予默认值,所以我必须在构造函数中进行。以下代码是我当前使用的方法的示例:

你觉得这怎么样 ?我应该改用 IoC 容器,还是有另一种方法可以为对象类型参数提供默认值?

0 投票
6 回答
44452 浏览

wcf - WCF 服务可以有构造函数吗?

当我在我的解决方案中新建一个 WCF 服务时,我可以执行以下操作,有一个带参数的构造函数要传入吗?如果是,运行时如何、何时以及在何处填充我所需的 IBusinessLogic 对象?

0 投票
13 回答
3641 浏览

dependency-injection - 您最常使用哪种松散耦合模式?

最近我看到很多关于如何构建松散耦合应用程序的博客文章。在创建松散耦合的应用程序时,您最常使用哪些模式?依赖注入?控制反转?

0 投票
6 回答
2971 浏览

c# - DI/IoC、NHibernate 并帮助他们一起工作

我试图让我的头脑围绕 DI/IoC、NHibernate 并让它们为我正在开发的应用程序很好地协同工作。我对 NHibernate 和 DI/IoC 都很陌生,所以不太确定我正在做的事情是否是明智的做法。这是场景:

该应用程序为用户提供了计算特定金融交易的特定价值(称为保证金)的能力。每个交易的保证金值的计算是通过抽象 MarginCalculator 类的具体实现来执行的,而要使用的具体实现取决于特定交易的产品类型(由产品对象的某个字段给出)。具体的计算器类是通过产品类的属性访问的。IE

用户从下拉列表中选择特定的客户端和产品,并将相应的客户端 ID 和产品 ID 传递到存储库,然后使用 NHibernate 填充产品和客户端对象,然后再将它们注入事务对象。在我当前的设置中,事务通过构造函数依赖注入(尚未使用 IoC 容器)接收其产品和客户端依赖项,即

以下是我希望得到的想法:

A. 是否可以通过 Product 域对象访问 MarginCalculator(本质上是一项服务),或者应该按照此处的建议(http://stackoverflow.com/questions/340461/dependency-injection-with-nhibernate -objects ) 重构代码以从域对象中删除服务依赖项,而是创建一个新的 TransactionProcessor 类,该类将抽象 MarginCalculator 作为依赖项(按照此处描述的内容 ( http://www.lostechies.com ) /blogs/jimmy_bogard/archive/2008/03/31/ptom-the-dependency-inversion-principle.aspx)即

B. 是否可以使用 IoC 容器来获取注入 NHibernate 填充/生成的产品和客户端依赖项的事务对象?即给定一个由用户提供的productId和clientId,是否有可能有类似的东西:

这样容器就解决了 Transaction 对象的 Product 和 Client 依赖关系,NHibernate 用于根据 productId 和 clientId 填充 Product 和 Client,然后将填充的 Product 和 Client 注入到 Transaction?

C.在典型的 DI 场景中,如果类 A 依赖于接口 B,则可能会执行以下操作:

但是,这实际上是所有 DI 示例的显示方式,它假定 IInterfaceB 的实现者(在本例中为 B 类)在设计时是已知的。有没有办法以在运行时确定实现者的方式使用 DI?

非常感谢

马修

0 投票
7 回答
7654 浏览

.net - 温莎城堡有什么缺点吗?

我一直在研究城堡项目,特别是温莎。我对这项技术的可能性印象深刻,拥有如此松散耦合的系统的好处是显而易见的。我唯一不确定的是使用这种方法是否有任何缺点,特别是在 asp.net 中?例如性能命中等。

我正试图让我的开发人员在这里看到这种方法的好处,并受到以下复出的打击:

  1. 那是使用反射,每次从容器调用对象时,都必须使用反射,因此性能会很糟糕。(是这样吗?它是否在每次调用时都使用反射?)

  2. 如果我依赖接口;如何处理具有附加到类上的额外方法和属性的对象?(通过继承)

0 投票
5 回答
3131 浏览

c# - Castle Windsor to Unity - 你能像在 CW 中一样在 Unity 中自动配置吗?

我不知道这是否是一个太具体的问题,如果可能的话,但我必须将使用 Castle Windsor 的应用程序移植到 Unity,这样就不会依赖非微软批准的库。我知道我知道,但你要做什么。

无论如何,我已经做到了,但我对我所拥有的并不满意。在温莎我有这个:

我已经统一转换为这个

如您所见,我必须注册每一件事,而不是能够使用某种自动配置。所以我的问题是:有没有更好的统一方式来做到这一点?

谢谢,

亚当。

0 投票
1 回答
3635 浏览

wcf - 带有 WCF 的结构映射?

有人有幸将 StructureMap(DI 框架)与 WCF 集成在一起吗?

我可以像这样在我的 WCF 服务的构造函数中返回默认实例,但显然它并不理想。

我看过这个(http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/07/29/integrating-structuremap-with-wcf.aspx)但没有运气设置它,因为我认为它与最新的 2.5+ 不兼容StructureMap 的发布。

0 投票
3 回答
252 浏览

c# - Linq2Sql, OOP, DependencyInjection 问题

我还在为 OOP 概念和依赖注入而苦苦挣扎,所以请耐心等待。

我已经使用 User 表生成了我的 Linq2Sql 模型,现在我希望能够向该用户发送确认电子邮件,因此我为我的 User 对象创建了一个部分类文件,我觉得添加一个 SendConfirmationEmail() 方法是很自然的到用户类。此方法将使用 MailService 发送实际的电子邮件,我想使用依赖注入来传递服务,所以我在 User 对象上创建了一个构造函数重载,如下所示

SendConfirmationEmail 方法看起来像这样

我意识到这是一种糟糕的依赖注入,我希望稍后切换到依赖注入框架,因为我对此有了更多的了解。

对我来说,问题是我需要从我的模型 dll 到我的服务 dll 的引用,这看起来不正确,因为我不确定我的 linq2sql 生成的实体与依赖注入框架和 OOP 概念的关系如何(我认为 ninject 看起来最有希望)。

我希望比我有更多经验的人能告诉我我是否朝着正确的方向前进。我知道我可以让它发挥作用,但我想教育自己在同一步骤中以正确的方式做到这一点。