问题标签 [ninject-conventions]

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

c# - FromAssembliesMatching 覆盖显式设置的绑定

有没有办法结合对 FromAssembliesMatching 的调用来自动设置大多数接口和一些显式绑定?我有以下代码应该自动将所有 ISomething 设置为 Something,然后为 IUnitOfWork 接口设置一个特定的构造函数,其中具体实现接受两个布尔值作为参数:

但是,当我尝试像这样调用 TryGet 时,我得到一个空值:

当我切换顺序并在第二次调用中明确调用 UnitOfWork 实现的 Excluding 时,它工作正常:

当我尝试解析 IUnitOfWork 的实例时,颠倒顺序或省略对 Excluding 的调用会再次导致 null。

将自动匹配与显式配置相结合的正确方法是什么?我正在使用 Ninject 3.2.0.0 和 Ninject.Extensions.Conventions 3.2.0.0。

0 投票
0 回答
233 浏览

ninject - 如果许多类使用 Ninject.Extensions.Conventions 继承一个接口,我该怎么办

在我的项目中,有多个类继承一个接口,还有很多这样的接口。例如A|B|C类继承Ilog接口,F|E|G类继承IData接口,H|I|J类继承IBase,以此类推。现在,我想绑定所有接口使用 Ninject.Extensions.Conventions,我该怎么做。如果使用约定不能做到这一点,请告诉我最好的方法。我想有人告诉我如何在Item中使用Ninject.Extensions.Conventions,不要告诉我具体的语法,我想知道如何组织我的类和接口让绑定接口更容易,谢谢你的帮助!像这样的代码示例:

现在,我想将接口 Ilog 解析为 A,IData 解析为 E,IBase 解析为 H,我该如何处理 Ninject.Extensions.Conventions?如果有很多这样的界面,我该怎么办?

0 投票
1 回答
34 浏览

ninject - Ninject 中是否有一种 OOB 方式可以在单例范围内配置服务?

我正在ninject使用ninject.extenions.conventions. 我想使用约定将一些服务初始化为单例。我知道在配置过程中添加SingletonAttribute和使用它很简单.WithAttribute<SingletonAttribute>()。但我不想重新发明轮子。

0 投票
1 回答
71 浏览

ninject - Ninject:在配置期间实例化服务

我想使用约定配置我的 ninject 容器并同时创建所有选定服务的实例。我目前的解决方案是:

更多
我有一个进程内服务总线。一些组件用 [Singleton] 装饰,并将自己注册到服务总线:

我需要在应用程序中创建所有服务总线观察者的实例。在类型映射旁边进行操作很方便(但合适吗?),因为 1. 类型已经枚举,2. 我可以访问 DI 容器。

0 投票
2 回答
97 浏览

c# - 判断 Ninject 约定绑定是否失败

我正在使用 Ninject.Extensions.Conventions 动态添加绑定。要加载的 .dll 名称存储在配置中。如果配置不正确并且 .dll 无法加载,最好知道这一点。目前,任何加载 .dll 的失败都不会冒泡。例如,如果我尝试加载土豆,则不会出现错误:

有没有办法知道我的配置不好?在 IntelliTrace 窗口中,我看到一个异常被抛出,但在它冒泡之前被捕获。

0 投票
2 回答
6929 浏览

c# - Ninject 动态绑定到实现

Stack Overflow 上有几个类似但不完全是我要找的问题。我想根据运行时条件进行 Ninject 绑定,这在启动时并不预先知道。Stack Overflow 上用于动态绑定的其他问题围绕基于配置文件或类似文件的绑定展开——我需要在处理特定实体的数据时根据数据库值有条件地发生它。例如,

在其他地方,我有 2 个实现 IExport 的 dll

然后对于合作伙伴B;

当前的 Ninject 绑定是;

那么如何设置绑定以便我可以做到;

这可能吗?看起来应该是,但我不知道该怎么做。上面现有的绑定配置适用于静态绑定,但我需要一些可以在运行时解决的问题。以上是可能的,还是我只需要绕过 Ninject 并使用老式反射加载插件?如果是这样,我如何使用该方法通过 Ninject 解析任何构造函数参数,就像静态绑定对象一样?

更新:我已经用BatteryBackupUnit' 的解决方案更新了我的代码,因此我现在拥有以下内容;

在 2 个测试模块中实例化导出实现可以正常工作并实例化PADBEntites上下文。但是,我的服务层中的所有其他绑定现在不再适用于系统的其余部分。PADBEntities同样,如果我将变量/ctor 参数更改为 ISomeEntityService 组件,我将无法绑定导出层。看来我错过了配置绑定以完成这项工作的最后一步。有什么想法吗?

错误:“激活 ISomeEntityService 时出错。没有匹配的绑定可用且类型不可自绑定”

更新 2:最终使用 's 的解决方案进行了一些试验和错误,BatteryBackupUnit尽管我对跳跃的想法不太满意。欢迎任何其他更简洁的解决方案。

我改变了原来的约定绑定;

更加冗长和明确;

不是我最喜欢的解决方案,但它适用于显式和基于约定的绑定,但不适用于两种约定。谁能看到我的绑定哪里出错了?

更新 3:忽略更新 2 中的绑定问题。看来我在 Ninject 中发现了一个与引用库中具有多个绑定模块有关的错误。模块 A 中的更改,即使从未通过断点命中也会使用不同的模块 B 显式破坏项目。看图。

0 投票
1 回答
112 浏览

c# - 多个 Ninject 模块给出奇怪的行为

这个有点复杂,但在我的环境中可以重现。架构如下;

Ninject 模块实现

现在,如果我运行带有以下错误的 Web 项目,上述操作对我来说会中断;

但是,如果我将绑定NinjectBindingsModule(对于控制台应用程序,而不是正在运行的 Web 项目)更改为以下内容;

然后 web 项目正常工作。没有从 web 项目中明确引用 NinjectBindingsModule 类,如果我在其中放置一个断点,也不会命中任何断点。NinjectWebBindings如果我将断点插入并继续正常运行,则会遇到断点。

这意味着 Ninject 正在加载或以其他方式扫描引用程序集中的所有模块,并在绑定方面对它们做一些事情。关于如何在每个模块没有单独项目的情况下解决此问题的任何想法?

0 投票
2 回答
130 浏览

ninject - 如何使用具有复杂启动的约定扩展(例如: ToMethod )

约定扩展示例

我得到的每种类型都应该用这种方法提供复杂的启动

0 投票
1 回答
26 浏览

c# - Ninject 基于枚举器返回实现

我的方法完全有可能是不正确的,但我想在尝试解决之前先概述实际要求。我的方法基于此处提供的详细信息

任务:在面向向导的结构中,BaseWizardStepNavigator根据当前步骤获取对象。例如,如果我在 step 上WizardStep.Step1,则返回Step1Navigator. 的实例Step1Navigator应该在其构造函数中提供任何注入的程序集,如果我有的话;

...该参数reader填充了适当的实现。

我的想法是我有一个管理器对象,ninject 可以通过传入基类的所有实现(使用适当的 IoC 注入)来实例化,这样;

最终将有 10 个向导步骤和适当的导航器来确定下一步是什么,但他们需要偶尔访问数据库才能做到这一点。

我当前的尝试和在NinjectModule我使用 Ninject 和 Ninject.Conventions 的地方执行绑定是;

模块(加载方法);

然后是绑定和提供者的其他类;

现在,虽然调用kernel.GetAll<BaseWizardStepNavigator>()确实调用了Provider实现方法,但我对如何真正让它吐回对象有点迷茫。文档晦涩难懂,我什至不完全确定我是否走在正确的道路上。帮助?

0 投票
1 回答
1389 浏览

c# - Ninject: More than one matching bindings are available same class twice

Given this class:

//..implementation }

And the following Ninject configuration:

I'm getting the following error:

More than one matching bindings are available.

Matching bindings:

1) binding from IQueryHandlerAsync{UserRoleByUserNameQuery, UserRole} to UserQueryHandler

2) binding from IQueryHandlerAsync{UserRoleByUserNameQuery, UserRole} to UserQueryHandler

Activation path:

1) Request for IQueryHandlerAsync{UserRoleByUserNameQuery, UserRole}

When trying to get an instance using this:

The suspicious thing is that I don't get the error trying to instantiate the other interface implementation:

And the error disapears if I create a separated class that implements only that interface:

From what I understand, the class is being binded twice, but I don't understand why is this happening (probably a bug?)