问题标签 [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.
c# - Ninject:将客户端的程序集作为构造函数参数传递,并使用属性从客户端指定所需的实现
一般来说,我是 Ninject 和 Dependency Injection 的新手,所以请原谅我的菜鸟。=)
我有几个IConfig
接口实现,它们扫描一个程序集及其依赖项以查找实现IConfigOption
接口的类型。每个IConfig
实现都从不同的来源检索它们的值。
这些实现将根程序集作为构造函数参数从哪里开始扫描,我试图提出一个注入这些值的绑定。到目前为止,我正在考虑以下内容:
我的问题是,我似乎无法找到一种方法来获取对注入类的target
程序集的引用。Config
如果没有 DI,我会使用Assembly.GetCallingAssembly()
,但在这种情况下,这会产生绑定所在的程序集,而不是所需的目标程序集。
另外,我需要一种从将接收注入的类/成员中指定预期实现的方法,例如,客户端类 A 请求使用的Config
实现者,RoleEnvironment
客户端类 B 请求使用的Config
实现者ConfigurationManager
。这是一个说明预期用途的示例:
我觉得要么我从错误的角度看这个,要么我错过了明显的东西,但我不确定我应该寻找什么。最好的方法是如何做到这一点?
非常感谢。
编辑:添加了预期用途的示例,并为清楚起见重新表述了问题的某些部分。
c# - Ninject 使用 ninject 注入泛型类型的所有实例
我希望能够使用 ninject 将特定泛型类型的所有实例注入到一个类中。例如,我有一堆类似于以下格式的自定义提取器:
我想将这些提取器的所有实例注入到一个类中,该类负责使用 ninject 多重绑定处理这个文件。
IE
在过去,我通过拥有一个直接访问内核的管理类(IProvideExtractors)来做到这一点,但我不喜欢这种方法,并且想知道是否有人知道更好的方法来做到这一点。使用 ninject 多重绑定,我可以得到我有兴趣使用的所有实例kernel.GetAll(typeof(IExtract<>))
asp.net-mvc - 带有构造函数注入和 MEF 的 Asp.net MVC 基本控制器
我有一个基本控制器类,它向它的子类公开一些日志记录功能。此日志记录依赖项是构造函数注入的。为了提供一些简化的代码,这就是它的样子:
我的子控制器也有自己的依赖项,因此它们看起来像这样:
我正在使用这些构造函数来轻松地在我的单元测试中进行依赖注入,但在生产中,所有组合都(应该)由 MEF 完成。我正在使用我的自定义控制器工厂类,它使用 MEF 来实例化控制器。
把它们加起来:
- 我有一个基本的抽象控制器类,它有自己的依赖项
- 我有后代控制器,它们使用导入来获取 MEF 注入的参数(即它们的依赖项以及基类的依赖项)
- 单元测试不使用 MEF,因此将模拟注入构造函数参数
问题
这一切对我来说都成立,但 MEF 的想法不同。当我编译并运行这段代码时,我得到了这个异常:
在先决条件导入 'SomeController..ctor (Parameter="logger", ContractName="ILogger")' 设置之前,无法调用 GetExportedValue。
所有用作构造函数参数的接口类型都InheritedExport
设置了属性并具有具体的实现,因此它应该按预期工作。
不同的工作替代方案
当我通过直接在这些私有字段上进行导入来尝试另一种方法时,一切似乎都很好。
所以这可行,但不一样......我可以在这里添加构造函数以进行依赖注入,但是我会有两组构造函数,并且在进行单元测试时可能会使用无参数构造函数,这当然是错误的,因为没有依赖关系会得到设置。不是真实的,也不是模拟的。
问题
如何通过将依赖注入构造函数设置为在构造函数中注入具体实现来说服 MEF 创建我的控制器ImportingConstructor
?
asp.net-mvc-3 - MVC:有条件地调用重载的构造函数
我有一个 MVC 应用程序,我在其中实现 CQRS,在其中我将保存数据与将数据读取到单独的接口中分开。我正在使用构造函数注入将这些接口的具体实例注入控制器。对于构造函数注入,我使用 Unity 容器。见下面的例子
我发现对于任何操作,我要么获取数据,要么写入数据,但不能两者兼而有之。在这种情况下,我需要根据需要初始化的“_Writer”或“_Reader”有条件地调用控制器构造函数。
如何才能做到这一点 ?
c# - 动态/上下文敏感的构造函数注入
我想注入构造函数参数 IActionLogger actionLogger,但希望其他参数 largeBucket、smallBucket 和 amountToRetrieve 是上下文相关的(不确定这是否是正确的术语)。
问题:
我是否应该将这些构造函数参数设为自动属性并将 IActionLogger actionLogger 参数保留在构造函数中?
基本上,计算会根据 largeBucket、smallBucket 和 amountToRetrieve 变量而有所不同?我将这些变量放在构造函数中,因为我需要事先进行一些设置。
c#-4.0 - Spring .NET 构造函数注入由其他依赖项创建的对象
以下问题:
我正在开发一个使用 RabbitMQ 连接到 API 的 WCF 服务。我们使用 spring 作为 DI 容器。
我们做了一个消费者类(一些用于rabbit MQ + logging的自定义逻辑)
精简版:
我们有一个 ConnectionManager 类:
现在的问题是,在使用 Spring.NET 连接所有东西时。我们想将 ConnectionManager 类的 Channel 属性注入到 Consumer 构造函数中。
到目前为止的 Spring 配置(精简):
那么我在 Do Something funky 上放什么?
我们还可以在消费者中重写和注入 ConnectionManager(最后一个选项)
design-patterns - 依赖注入将依赖传递给其他具体类型
我确信这没什么大不了的,应用程序也不大,但我正在尝试在任何我可以的地方练习 DI,以获得经验。我有以下类,它所做的只是解析用户在控制台应用程序中输入的一些参数,并根据传入的参数返回一个 ICommand 实例。在控制台应用程序中使用命令的设计取自 Mark Seeman 的书 Dependency Injection 。网。我的问题是 ICommand 类的一个实现需要一个 IDocumentService 实例。现在为了确保我可以满足对 ICommand 的依赖,我正在使用构造函数注入将 IDocumentService 传递给 Parser。这对我来说似乎很奇怪,因为我认为如果一个类具有依赖项,它应该使用该依赖项,而不仅仅是将其传递给依赖项。同时,我认为如果我构建一个抽象的 IDocumentServiceFactory 以便 Parser 类可以在文档根之后解析 IDocumentService,那将是矫枉过正。感谢任何解决此设计问题的指导。
asp.net-mvc - 使用 Unity 动态注入构造函数参数
我在 ASP.NET MVC 4 应用程序中使用 Unity 容器进行依赖注入。
对于特定的控制器(比如 ProductController),我有一个依赖注入场景,如下所示:
- ProductController 构造函数采用 IProductsRepository 实例。
- IProductsRepository 实现有一个接受 IProductsService 实例的构造函数。
- IProductsService 实现具有一个接受身份验证令牌字符串的构造函数,该字符串是从 Web 请求中的 cookie 中检索的。
考虑到身份验证令牌 cookie 只能在创建控制器实例后检索,在这种情况下进行自动依赖注入的正确方法是什么?
c# - 在解析服务时,如何指定 Unity 使用的构造函数?
我有以下构造函数:
在 Bootstrapper.cs 中
当我尝试让 Unity 解析我的服务时,它会给我一条错误消息,指出有多个构造函数具有一个参数:
有没有办法强制 Unity 使用我的两个构造函数之一?
c# - 构造函数注入 Win8 App
Win8 App中如何实现DI和IoC?在windows窗体中,如果我需要一个带有依赖项的窗体,我传入构造函数(构造函数注入)但是使用Page你怎么办?如果我用这个构造函数构建一个页面(
然后
我怎样才能传递论点?