问题标签 [ninject]

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 投票
7 回答
1496 浏览

dependency-injection - 依赖注入框架:我为什么要关心?

我正在阅读Injection by HandNinjection(以及为什么使用 Ninject)。我遇到了两个困惑:

  1. 手动注射技术我已经熟悉了,但我不熟悉 Ninjection,因此不确定完整的程序如何工作。也许提供一个完整的程序会有所帮助,而不是像在该页面上所做的那样,将程序分解成碎片

  2. 我仍然不明白这如何使事情变得更容易。我想我错过了一些重要的东西。如果您正在创建一组注入然后在两个大组之间同时切换,我可以看到注入框架将如何有所帮助(这对于模拟等很有用),但我认为还有更多比起那个来说。但我不确定是什么。或者,也许我只是需要更多的例子来说明为什么这是令人兴奋的,以说明这一点。

0 投票
4 回答
2676 浏览

asp.net-mvc - 有谁知道让 Ninject 2 在 ASP.NET MVC 中工作的好指南?

我正在努力使用文档来弄清楚我需要什么。无论如何,文档(据我所知)适用于 1.5。

注意:我不想扩展 NinjectHttpApplication

我已将其配置为在Application_Start()中使用NinejctControllerFactory ,但是当它尝试创建控制器时,我在KernelContainer.Kernel上得到一个空引用异常。如果我不扩展 NinjectHttpApplication,我应该在哪里配置内核?

0 投票
5 回答
883 浏览

c# - 将 IoC 与内部对象一起使用

我目前正在为我使用的程序编写一个开源 SDK,并且我在内部使用 IoC 容器(NInject)来连接我所有的内部依赖项。

我有一些标记为内部的对象,这样我就不会拥挤公共 API,因为它们仅在内部使用并且不应该被用户看到,比如工厂和其他对象。我遇到的问题是 NInject 无法创建内部对象,这意味着我必须将所有内部对象标记为公共,这会挤满公共 API。

我的问题是:有什么办法可以解决这个问题还是我做错了?

PS。我曾考虑过使用 InternalsVisiableTo 属性,但我觉得这有点异味。

0 投票
1 回答
3857 浏览

dependency-injection - 在 NInject 中绑定 MembershipProvider 时应该使用 InSingletonScope 吗?

我对 NInject 绑定很陌生,这就是 NInject 所描述的。

  • TransientBehavior - 每次请求时都会创建该类型的新实例。
  • SingletonBehavior - 只会创建该类型的单个实例,并且为每个后续请求返回相同的实例。
  • OnePerThreadBehavior - 每个线程将创建该类型的一个实例。
  • OnePerRequestBehavior - 每个 Web 请求都会创建该类型的一个实例,并在请求结束时销毁。

如果我想将 MembershipProvider 绑定到 SqlMembershipProvider,我应该使用 SingletonBehavior,因为我只需要一个 sql 成员资格提供程序吗?

0 投票
5 回答
51223 浏览

asp.net-mvc - Ninject 与 Unity 的 DI

我们正在使用 ASP.net MVC。

其中哪一个是最好的 DI 框架 Ninject 或 Unity,为什么?

0 投票
3 回答
590 浏览

c# - Ninject 编译错误

Ninject 看起来很棒,所以我想在我的项目中使用它。不幸的是,我仍在努力做最琐碎的绑定。[Inject] 属性编译得很好,但是编译器找不到“Bind”命令:

这里可能出了什么问题?

0 投票
1 回答
754 浏览

ninject - Ninject 清除已解决的实例

我有一些设置为单例的绑定。我希望它们始终返回相同的实例,直到我希望清除所有单例实例的某个点。我不想删除并重新添加绑定,只需清除已创建的实例即可。这可能吗?

0 投票
2 回答
1664 浏览

.net - Ninject:如何根据依赖链设置绑定

Ok Dependency Ninja's,这里有一个给你的……

我想根据我从内核请求的类型更改 Ninject 构建依赖项的方式。

我有一个带有以下构造函数的 DbConnectionFactory 类:

对于“默认”绑定,我希望 Ninject 使用无参数构造函数:

我的代码中的某些类需要 Ninject 来提供 connectionString 参数。我尝试像这样设置绑定:

但是,我只让 Ninject 使用默认构造函数。

我一定遗漏了一些明显的东西!

0 投票
1 回答
3207 浏览

wpf - 使用 Ninject 将依赖项注入 WPF

我有一个 WPF UserControl,我想将依赖项注入其中。使用Ninject执行此操作的最佳方法是什么?

举一个具体的例子:我有一个名为 MapView 的 UserControl,我想通过构造函数或属性注入将我的 IDialogueService 的实例注入其中。目前,我没有使用任何依赖注入,并且我的控件是在 XAML 中创建的:

创建 IKernel 并绑定 IDialogueService 非常简单。但我坚持如何使用内核将依赖项注入我的 MapView。我仍然是 Ninject 的新手,所以也许我缺少一些明显的东西。

我可以想到几种方法来解决这个问题:

  1. 在代码中实例化 MapView。从 XAML 中删除<MapView ... />,并将其添加到 GameWindow 的构造函数中:

    缺点:不使用 XAML 会带来额外的复杂性;GameWindow 依赖于 IKernel。

  2. 将实例化保留在 XAML 中,并改用属性注入:

    缺点:Ninject 文档说 Inject() “不应该在大多数情况下使用”,所以我什至不知道它是否做了我认为它做的事情,或者在这里使用它是否有意义。而且GameWindow仍然对IKernel有依赖。

  3. 向 GameWindow 添加可注入参数/属性,将值传递给 MapView(可能通过 MapView 上的属性),然后使用Get<GameWindow>(). 缺点:现在我在各处手动传递依赖项,这是 DI 框架应该为我自动化的。

  4. 实例化 GameWindow 后,遍历逻辑树并对所有内容调用 IKernel.Inject()。缺点:同样,我不知道 Inject() 是否按照我的想法做,或者在这里是否合适。调用者必须记住在实例化 GameWindow 后执行遍历可视化树和注入的操作。

有一个更好的方法吗?也许是 Ninject 的 WPF 扩展,它可以让我做一个Get<GameWindow>(),并自动为我遍历逻辑树(如 #4 所示),对所有内容进行属性注入?如果没有这样的东西,我可以写吗?

你们如何将 Ninject 与 WPF 一起使用?您是否使用上述任何方法(如果是,您能否分享我不知道的优点/缺点)?你有更好的方法吗?

0 投票
2 回答
1068 浏览

asp.net-mvc - 构建中等大小的 asp mvc - 使用 ninject 和创建对象

我正在使用 asp.net mvc 技术设计中型网站。所有业务逻辑都组织成 IService(如 IDomainService、IUserService、IAuthService、ITrainingService)。所有服务都使用 IRepositories。我正在使用 Ninject 1.5 将服务与控制器连接起来,它似乎工作得很好。

到目前为止,我不知道如何处理一个主题。一些服务创建上下文(每个请求) - 例如 IDomainService 创建 IUserService 所需的 DomainContext(每个请求)。ITrainingService 仅在 TrainingController 中使用,它只能由授权用户访问,并且 ITrainingService 需要 UserContext(也根据请求)来了解谁在接受培训。

这是我第一个使用 IoC 容器的项目。是否有任何设计模式或代码模式如何解决它?我想我可以使用 ActionFilters 填充上下文对象,但是如何管理它们的生命周期以及将它们放置在何处以供 IServices 访问?(以优雅的方式)