问题标签 [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.

0 投票
1 回答
616 浏览

mvvm - 使用 AvalonDock 将实例化的 ViewModel 注入到视图中

我有一个绑定到 AvalonDock 的 LayoutItemTempate 的 ViewModel 的 Observable 集合。当用户从获取的列表中打开一个问题时,它会在 observable 集合中创建一个新的 ViewModel。结果创建了一个新文档,但它是新文档,并且不使用集合中的 ViewModel。

我尝试使用转换器,但它似乎根本没有使用转换器。有人知道替代方案吗?甚至可能是代码隐藏解决方案?

这是主要的 XAML 片段。. .

我的转换器代码。. .

0 投票
1 回答
4736 浏览

java - Guice Generic Provider(Provider 本身是通用的,而不是它绑定的类)

有很多关于如何使用 Guice Provider 绑定到泛型类的在线资源,例如像这样的wiki 条目和像这样SOF 问题。但是,我很难找到有关如何使用本身通用的 Provider 的资源。

例如,假设我有以下内容:

如您所见,Bar 有一个必须在构造函数中的注入参数。在我的情况下,我们不能将此参数移动到字段或方法注入。

所以,现在我想为 Foo 编写一个 Provider,但是它返回一个 Bar 的实例。像这样的东西:

请注意这个类是如何依赖于 Guice 注入本身的单例,因此必须使用.toProvider(FooProvider.class). 我们也只能使用构造函数注入而不是方法注入或字段注入,这可能是因为此 Provider 的类型层次结构。

我试图找到某种要使用的方法.toProvider(FooProvider<Bar>.class),但我们都知道这不是有效的 Java 语法。有谁知道我如何.toProvider(Class<? extends Provider>)在模块中使用 Guice 绑定器的方法,以便我可以使用通用提供程序来创建实现的具体类?让我知道我的问题是否有点令人困惑。

0 投票
1 回答
275 浏览

inversion-of-control - MvvmCross:IMvxLocationWatcher 在 3.0.13 中无法解析

我只是将我的解决方案从 3.0.9 升级到 3.0.13。一切似乎运作良好。非常感谢 MvvmCross 团队在这个伟大的框架上的持续努力。

我在用 IMvxLocationWatcher 替换现在已贬值的 IMvxGeoLocationWatcher 时遇到了一个小问题。这些依赖构造函数注入来获取 IMvxLocationWatcher 实例的服务现在正在抛出 System.TypeLoadException,如下所示:

我错过了什么?

再次感谢。

0 投票
1 回答
1134 浏览

php - 从php构造函数中获取构造参数依赖

使用php ReflectionClass我可以找到必须在类构造函数中注入哪些参数才能创建新实例。

还有一种方法可以获取这些参数的依赖关系。因此,如果 的构造函数someClass如下所示:

我可以以某种方式从构造函数中获取类依赖项吗?

0 投票
1 回答
40 浏览

dependency-injection - 设计方法 - 在简单的应用程序中使用 DI

嗨,我想检查一下我是否在考虑设计问题。我对 DI/IoC/TDD 很陌生,如果我犯了一个明显的错误,我很抱歉。

我有一个简单的应用程序,它将从贸易日志中读取,读取一些 XML,然后保存到数据库中。

理想情况下,我想使用带有 DI 和可能的 IoC 的 TDD 方法来创建这个应用程序。

所以我创建了一些代码(见下文)。

现在对我来说,这里的问题是,当我去测试这段代码时,我无法模拟 DataRepository 对象。

所以我考虑了DI,它看起来像:

在我的程序类中,我可以传入一个 IDataRepository 类,但这是否太多了?这也是正确的方法吗?我有点担心我可能会遗漏一些明显的东西?

可测试性方面,我可以将模拟的 IDataRepository 对象注入到 ITradeXMLProcessor 类中,对其进行处理,但不能保存到数据库中,这很好,但我真的需要模拟这样一个简单的操作吗?我看不到我真正从中获得的好处?

0 投票
1 回答
1072 浏览

c# - 如何自动生成免费接收和存储服务的构造函数?

问题

我经常发现自己手动输入如下代码:

要求

我想通过尽可能多地生成这种方法来节省时间。我不想使用需要购买的工具。这里唯一可变的信息是类名和服务类型。所以在这个例子中,我想像这样输入一些最小的东西:

  1. Some+Shortcut
  2. SomeClass
  3. ServiceA
  4. ServiceB
  5. Enter

我也愿意接受仍然需要我输入字段名称的解决方案。我不介意private字段定义中是否存在访问修饰符,尽管我更喜欢没有它,因为这样代码会更精简一些。同样,我愿意接受不生成只读字段的解决方案,但我更喜欢它们,因为我很少想在我的类初始化后更改服务。

我试过的

目前我所知道的最快的解决方案是在另一段代码中键入类似以下内容,并告诉 Visual Studio 从其使用中创建类和构造函数。

但是,我并不总是按这个顺序工作。有时我想在使用它之前创建一个类。所以我通常做的是:

  1. 调用ctor代码片段。
  2. 填写构造函数体。
  3. 使用 CodeRush Xpress 生成字段。(它提供了一种生成只读字段的方法,而 Visual Studio 不会将它们设为只读。)

代码片段运行良好,但我认为它们不支持可变数量的参数,因此它们可能不适合这个问题。

0 投票
1 回答
530 浏览

c++ - C++中构造函数注入的高级配置

我的问题是专门处理通过构造函数的依赖注入。我了解服务定位器模式、构造函数/设置器注入及其风格的优缺点,但是在选择纯构造函数注入后,我似乎无法克服一些问题。在阅读了许多可测试设计的材料后,包括彻底阅读 Miško Hevery 的博客(特别是这篇文章)后,我处于以下情况:

假设我正在编写一个 C++ 程序,并且我已经通过它们的构造函数正确地注入了我的依赖项。为了可读性,我给了自己一个高级对象,它有一个从 main 调用的 Execute() 函数:

Execute() 的职责是简单地连接所有需要的对象并启动最高级别的对象。最高级别的对象需要几个依赖项,这些对象需要一些对象等等,这意味着一个看起来像这样的函数:

从我从 Miško 的博客中获得的内容(我会问他,但认为他没有时间回复我),这是满足纯构造函数注入依赖项的唯一方法。

在提到的博客文章中,他指出我们应该在每个对象的生命周期级别上都有工厂,但这本质上是 Execute 正在做的事情,使我的代码看起来与他的示例相同:

问题:

  • 这是正确的方法吗?
  • 这是我不知道的模式吗(似乎类似于 Maven 的 context.xml)?
  • 对于纯粹的构造函数注入,我是否只是承受“前期”分配的成本?
0 投票
3 回答
26069 浏览

c# - Web API Controller 的构造函数是如何调用的?

根据这篇文章,控制器应该有一个构造函数来获取要实现的接口,例如:

但是这个构造函数是怎么调用的呢?通过客户端调用包含在此类中的 Web API 方法进行估算,但它如何传递接口类型?或者这不是必须发生的(构造函数没有被任何人/从任何地方显式调用)?

更新

规范示例显示在接口声明前附加“私有只读”,但这不是编译所必需的。是否有一个编译,我的意思是令人信服的理由,让我在前面加上“私有只读”?

0 投票
2 回答
14383 浏览

c# - 在 Simple Injector 中注册具有多个构造函数和字符串依赖的类型

我试图弄清楚如何使用 Simple Injector,我已经在项目中使用它,注册简单服务及其组件没有问题。

但是,当组件具有两个以上实现接口的构造函数时,我想使用依赖注入器。

这是我注册服务的方式:

运行代码,这是发生的错误:

对于能够创建 DAL 的容器,它应该只包含一个公共构造函数,但它有 2 个。

删除构造函数后,下一个错误是它不允许我的构造函数接受参数。

DAL 类型的构造函数包含不能用于构造函数注入的 String 类型的参数“databaseInstance”。

有什么方法可以在类有超过 2 个公共构造函数的情况下进行依赖注入?或者有一个接受参数的公共构造函数?

我在这里阅读了文档:SimpleInjector(入门)

该文档一开始很容易理解,但它变得非常复杂,如果他们提到的后面的任何例子与我的问题有关,我很难理解。

0 投票
2 回答
2207 浏览

java - Setter Injection 不适用于 Spring 的工厂方法注入

我有两个 bean,SimpleBean 和 ArgumentBean,我正在尝试通过工厂方法连接 bean,并尝试在相同的 bean 定义中替换 bean(我知道这样做很糟糕,但我只是在做一个实验)

即我有以下工厂实用程序类:

并且在spring config xml中指定了下面提到的配置:

我在上面执行时收到此错误:

值得一提的是,所有的 getter 和 setter 都存在于两个 bean 中。SimpleBean.java 具有类型 ArgumentBean.java 的属性。

简单 Bean 的定义是:

ArgumentBean 的定义是:

如果我从 simpleBean 定义中删除属性标记,我不会收到任何错误。此标记不适用于工厂方法,但在尝试使用构造函数参数时效果很好。有人可以帮我理解这种情况吗?