问题标签 [constructor-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.
dependency-injection - 使用 [ImportingConstructor] 将调用对象导入使用 MEF 的构造函数参数
我正在将我的一些代码从一个与 MEF 做同样事情的专有系统转换为 MEF,我有一个关于如何完成我最近遇到的以下问题的问题。
我有一个典型的实体对象,看起来像这样:
以及一个需要导入到上述实体对象中的服务对象:
为了把它说成话,我需要account
传递给AccountServerService
构造函数实例的参数是调用对象的Account
对象。所以它的行为是这样的:
请让我知道这种情况是否可行,或者我是否必须在这种情况下重构我的服务接口。
dependency-injection - GlassFish、CDI 和构造函数注入
GlassFish 3.1 的托管 bean 的 CDI 实现是否支持构造函数注入?我有一个@Singleton
EJB,我想使用构造函数注入向其中注入另一个托管 bean(包含在同一个 EJB 模块中)。现场注入确实有效。但是通过构造函数注入,我得到了一个NullPointerException
from AbstractSingletonContainer
。
这确实有效:
这不起作用:
c# - Unity 应用程序块 - 配置文件中的构造函数注入
如何在创建对象时指定不带参数的构造函数?我知道如何为参数化的构造函数做这件事,但无法为无参数构造函数找到任何帮助。
我知道如何通过代码来做到这一点,但需要通过配置来做到这一点的解决方案。
asp.net-mvc-2 - Ninject 2.0:根据实现传递不同的参数
我刚刚开始使用带有 ASP.NET MVC 2 的 Ninject 2.0。所以,我有一个接口 IMongoRepository 和类 MongoRepository。
MongoRepository 接收参数字符串集合。
根据我要使用的集合,我在 MongoRepository 的参数中传入不同的值。我希望我的措辞正确,但是如何根据我使用的控制器映射不同的参数?
例如,在 Article 控制器中,我会调用:
在 PageController 我会调用:
我想做的只是进行构造函数注入并传入 IMongoRepository。有什么想法或建议吗?
顺便说一句,我只是在学习 IOC/DI;所以,我愿意接受国际奥委会忍者的任何提示!谢谢!
assemblies - 如何在外部程序集中类型的构造函数注入中使用 Ninject
我正在从外部程序集中加载一个类型,并希望创建该类型的一个实例。但是,此类型/类是为当前由Ninject
. 如何使用Ninject
创建这种类型的实例并注入任何构造函数依赖项?
下面是我如何获得这种类型。
dependency-injection - DI,构造函数注入,模块,设计模式
我在参与的项目中遇到了一些架构问题。该项目是一个 ASP.NET MVC 2 应用程序,它依赖于 DI,尤其是使用 Unity 的构造函数注入。应用程序分为几个模块(每个模块是一组程序集),将服务暴露给其他模块。这些服务在应用程序启动时注册到 Unity。到目前为止没有什么特别的。假设我有这个(每个模块都是一个简化的程序集):
模块A,模块B。
ModuleA 使用以下方法公开服务“IServiceA”:
IServiceA(操作 1 - 操作 2 - 操作 3)
ModuleB 中的 ServiceB 需要 ModuleA 中的 IServiceA ,它通过构造函数注入(具有具体实现)来获取它。然后它使用它。
问题是当 ModuleA 被停用时(如果在应用程序启动时为当前用户激活了模块,我们会在数据库中检查),因此 serviceA 没有在 Unity 中注册。
然后我们在运行时出现异常,因为 unity 找不到 IServiceA 的注册并且无法构造 ServiceB。这是正常的。
我想知道有一套模式或最佳实践来处理它。我的第一个想法是摆脱 ServiceB 的构造函数注入。但是我应该使用对 ServiceA 的硬引用,但我不喜欢它,或者使用更糟糕的 ServiceLocator。如果 ServiceA 可用,我不想检查 ModuleB,因为我会检查许多其他服务,并且应该处理纯基础设施的代码。如果 serviceA 可用或不可用,我希望 ServiceB 运行相同的代码(不知道是否可能)。我查看了网关模式,但不知道这是否可以帮助我。
任何帮助将不胜感激。
谢谢,
ninject - Ninject、Providers 和 Activator.CreateInstance
我对 Ninject 还很陌生,但我已经成功地使用自定义提供程序将它用于 DI。
绑定初始化如下
在自定义提供程序中,我像这样调用 Activator.CreateInstance
(是的,我知道上面的代码中没有错误处理等:))
这一切就像一个魅力。
现在,我面临的问题是当我引入一个希望注入 IPatientRecordLocator 实例的新类时。当我将如下构造函数添加到例如这些类之一时,就会出现问题
然后,为了使 Activator.CreateInstance 工作,我还必须向类 MockPatientRecordLocator 添加一个无参数构造函数,即
所以,我的问题是:如何让 Ninject 将实现 IContactAdapter 的类的实例注入到例如 MockPatientRecordLocator 中?我尝试过方法注入,但无济于事。
我忘了解释我想要实现的是一种链式注入,其中 PatientRecordSummary 类的实例被注入 MockPatientRecordLocator 的实例(使用构造函数注入),并且所述 MockPatientRecordLocator 的实例应该被注入 IContactAdapter 的实例(再次使用构造函数注入(如果可能))。链条的第一部分有效,第二部分无效。
dependency-injection - 是否可以使用 Unity 将参数注入受保护的构造函数?
我可以在温莎城堡做到这一点:
这在 Unity 中可行吗?我试过这样做,但它抱怨它找不到构造函数。看来我只能通过子类型注入。
dependency-injection - 构造函数注入以及何时使用服务定位器
我正在努力理解 StructureMap 的部分用法。特别是,在文档中声明了一种常见的反模式,即仅使用 StructureMap 作为服务定位器而不是构造函数注入(直接来自 Structuremap 文档的代码示例):
代替:
这对于一个非常短的对象图来说很好,但是当处理很多层次的对象时,这是否意味着您应该从顶部向下传递更深的对象所需的所有依赖项?当然,这会破坏封装并暴露太多关于更深层对象实现的信息。
假设我正在使用 Active Record 模式,因此我的记录需要访问数据存储库才能保存和加载自身。如果此记录加载到一个对象中,该对象是否调用 ObjectFactory.CreateInstance() 并将其传递给活动记录的构造函数?如果该对象在另一个对象内部怎么办。它是否将 IRepository 作为自己的参数从更远的地方开始?这将向父对象公开我们此时正在访问数据存储库的事实,外部对象可能不应该知道这一点。
任何想法将不胜感激。
西蒙
编辑: 意见似乎是注入应该从顶层开始。ActiveRecord 将被注入到 ThingThatNeedsRecord 中,而 ThingThatNeedsRecord 又被注入到 OuterClass 中。这样做的问题是,如果 ActiveRecord 需要使用运行时参数(例如要检索的记录的 id)进行实例化。如果我在顶部将 ActiveRecord 注入到 ThingThatNeedsRecord 中,我必须以某种方式弄清楚此时需要什么 id(它将顶层暴露给它不应该实现的实现),或者我必须有一个部分构造的 ActiveRecord并稍后设置 Id。如果我需要 N 条记录并且直到在 ThingThatNeedsRecord 中执行逻辑才会知道,这会变得更加复杂。
autofac - 如何使用 Autofac 注入同一对象的两个实例?
我正在使用 Autofac 构造函数注入。我需要弄清楚如何将单个对象实例注入多个构造函数参数,而无需在容器设置阶段显式解析每个参数。
我有一个复杂的场景,可以通过这种行为来简化;以下示例只是一个简化的场景,因此我可以演示我正在寻找的行为。
例子:
假设我有这两个接口,IOpenable 和 ICloseable:
我有一个实现它们的 Door 类:
我有一个接受 IOpenable 和 ICloseable 的类:
问题:
每当 IOpenable 和 ICloseable 都是同一个构造函数中的依赖项时, 是否可以告诉 autofac 将相同的 Door 对象注入到两个参数中?
注意:我不能这样做:
那会做我想做的,但请记住这个 DoorHandler 类只是一个例子。在我的真实代码中,“DoorHandler”实际上是一个 MVC 控制器,我正在使用 RegisterControllers() 注册它。所以我不能像上面那样注册它。此外,有时依赖图可能会变得过于复杂,并且在每种情况下都明确地执行此操作会变得不堪重负。
我想我正在寻找的是能够做类似的事情:
c.ResolveShared<T>
如果在同一个构造函数中调用多个参数,where 调用将全部解析为同一个 T 对象。
也许:
显然,如果我对 Door 对象使用 InstancePerLifetimeScope 或其他东西,每个已解析的 Door 都将是同一个实例。但我不希望这样,每次创建 DoorHandler 时我都想要一个 Door 的新实例,并且我希望将该 Door 作为两个参数传递给 DoorHandler 构造函数。