问题标签 [contextual-binding]

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 回答
453 浏览

c# - Ninject 基于对象属性的绑定?约定还是上下文绑定?

我有一个界面:

我有两个课程:

我想发送 o,然后让 Ninject 根据 o 的属性确定它是哪个接口。obj 类似于:

我想要这样的东西:

但我以前没有和 Ninject 合作过。有任何想法吗?

0 投票
1 回答
426 浏览

c# - NInject 上下文绑定当方法被调用太多次时

这是一个非常简单的场景,我正在创建虚拟接口 + 实现并使用NInject 的 Contextual BindingWhen方法 which绑定它们return true,并且它还在调用时将“测试”消息输出到控制台。我以为When()每个预期只会被调用一次,Get<>()它只输出一次“test”,但神奇地(或不是?^_^)它输出 3 次“test”

这意味着When()每个Get<>()请求调用 3 次(我添加了 IWarrior 的另一个实现并绑定它,然后输出计数为 6(每个绑定 3 个))。

为什么会这样?我们将对每个绑定进行一些重要(而且也很耗时)的检查,但是将其调用 3 次而不是 1 次将是一个问题。

0 投票
1 回答
543 浏览

c# - Ninject 2+ 依赖类的上下文绑定,具有相同构造函数参数的不同名称

在两个类具有相同的底层接口依赖项但每个类 ctor 的参数名称不同的情况下,无法弄清楚如何管理上下文绑定。下面的伪代码来演示我的情况:

fileCode是根据对本地文件的一些分析计算得出的。确定文件类型后,我希望 Ninject 交回适当的对象以处理该文件

B由于我定义的现有绑定需要具有不同名称的构造函数参数,我将如何处理绑定?一般来说,有没有更好的方法来做到这一点?

我想我可以使用p.Name == "fileCode" || p.Name == "fileCd",但我无法摆脱我做错了什么的感觉(感觉很乱)。此外,我对按名称提取参数并不感到兴奋,并且我考虑过创建一个自定义类型,它可以为 Ninject 提供更具体的内容来匹配字符串参数。从我的立场来看,我要么只是管理多个参数名称的情况,要么切换到自定义类型作为我的参数而不是字符串。

0 投票
1 回答
205 浏览

c# - 使用构造函数参数将接口绑定到多个具体实现

我正在尝试进行上下文绑定,但无法将具体实现接口绑定为构造函数参数。忍者版本:3.2.0.0

我的结构如下:

INotifier 1. XNotifier 2. YNotifier

IPublisher 1. APublisher 2. BPublisher

其中 XNotifier 和 YNotifier 采用 IPublisher 类型的构造函数参数。

这是我的绑定:

用法:

但出现以下错误

激活 INotifier 时出错 没有匹配的绑定可用,并且类型不是自绑定的。

0 投票
1 回答
64 浏览

c# - tdd ioc 容器 ninject 上下文绑定

我需要一些帮助来使用 ninject 的上下文绑定我有这样的事情:

以及实现 Sound 和我的绑定模块的完全相同的 Dog Sound:

和我试图运行的测试

它不知道我应该如何在这里断言

0 投票
1 回答
179 浏览

c# - 使用 Ninject 上下文绑定时如何检索属性和属性?

我有一个构造函数

该属性包含一个属性“FilePath”。

在上述情况下,我想检索“FilePath”的值,即“C:\SampleData\login.json”。

是否可以使用 Ninject 的 IContext 检索值?

这个想法是检索属性的值,然后在绑定中使用它,如下所示:

其中 CheckAttributePath 将是委托:

我不确定如何获取属性的值。

0 投票
1 回答
48 浏览

c# - 使用上下文绑定时如何避免在注入目标程序集上需要对 Ninject 的引用

我正在研究与 Ninject 的上下文绑定。这适用于当您有一些抽象的多个实现时,并且注入目标类中的上下文确定注入哪些实现。

在文档中,使用“命名绑定”的示例如下所示:

这意味着包含的程序集WeakAttack显然必须引用 Ninject 才能NamedAttribute在构造函数中使用。依赖注入的目标不必知道使用了哪个 DI 容器。我在这里想念什么?

0 投票
7 回答
284 浏览

c# - 两种类型使用子依赖——如何使用不同的实现

假设我们注册了两种类型,RootARootB,每个都依赖于ISubdependency

共享相同的子依赖实现很容易:

现在的目标是让两种根类型使用不同的子依赖实现。调用者应该能够注册实例、工厂或类型。

我已经设法实现了前两个场景,尽管这里解释的方法有点复杂。然而,第三种情况仍然超出我的想象。让我们假设如果我们能解决那个问题,我们就可以解决所有问题。

所以问题是这样的:

  • RootARootB依赖ISubdependency.
  • 其他类型也可能取决于 ISubdependency。
  • 如果我们注册一个特定的实现,例如services.AddSingleton<ISubdependency, SubdependencyZ>(),那么该注册是全局的(对于容器),它会覆盖任何以前的注册ISubdependency。结果,最后一次注册最终被用于所有家属!
  • 特别是基于类型的注册(上面的场景 3)具有挑战性,因为我们只有类型,没有简单的方法来解析实例。这意味着我们必须求助于让容器解析注册的类型,这使得解决前面的要点变得更加困难。
  • 我们必须坚持使用 .NET Core 的 IOC 扩展。我们不允许依赖特定的第三方容器。编辑:这是因为代码旨在用于 NuGet 包,其中消费应用程序选择容器。

问题

  1. 我们怎样才能达到预期的结果?最好是一种不复杂的方式!

  2. 关于这个问题是否有事实上的标准?它是一个普遍认可的用例,对同一接口上的依赖项使用不同的实现吗?或者这通常完全避免,迫使家属简单地使用相同的实现?

0 投票
0 回答
44 浏览

laravel - 如果使用 make() 或 makeWith() 完成上下文绑定,\GuzzleHttp\Client 解析会挂起

我正在编写一个简单的 API 包装器,这个包装器需要配置的 GuzzleHttp\Client 实例作为依赖项。

如果我使用in创建Client实例,一切正常:new Client()AppServiceProvider->register()

但是如果我使用orApi创建实例,实例解析会挂起:Clientmake()makeWith()

我通过修补程序进行了快速测试:

它只是永远挂起。

0 投票
0 回答
33 浏览

laravel - Laravel 上下文绑定对方法更具体,而不是仅对类

我想了解 laravel 绑定。假设,我有 UploadFileController.php

然后在控制器中,

现在,uploadServiceProvider,

现在,我知道“何时”说带有 uploadService 接口的 UploadFileController 类将提供 imageUploadService 但我是否可以让它更具体地用于 uploadFileController 类中的功能,例如

然后它需要与 pdf 上传类相同的 imagesUploadService 类。