c# - NInject:您在哪里保存对内核的引用?

标签 c# dependency-injection inversion-of-control ioc-container ninject

我在一个新的网络应用程序上使用 NInject,有两件事我不清楚:

  1. 我不需要保留对内核(Session/App 变量)的引用以确保 GC 不会收集我的所有实例吗?例如,如果我指定 .Using() 然后 Kernel 对象被收集,那么我所有的“单例”是不是也被收集了?

  2. 如果我确实需要保留对 Kernel 对象的引用,我该如何允许传递给 WithArguments() 的参数发生变化,或者这是不可能的。

最佳答案

您确实不想绕过内核。通常,在 Web 应用程序中,我将内核存储在 HttpApplication 的静态属性中。如果您需要对内核的引用,您只需公开一个类型为 IKernel 的依赖项(通过构造函数参数或属性),Ninject 将为您提供对激活该类型的内核的引用。

如果您在绑定(bind)上使用 WithArguments(),它们将用于所有激活。如果您使用 IParameters,它们将仅用于该激活。 (但是,如果您激活的服务具有像 Singleton 这样的可重用行为,即使您传递不同的 IP 参数,它也不会被重新激活。)

关于c# - NInject:您在哪里保存对内核的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/590900/

相关文章:

c# - 在 native C++ 项目中导入 C# dll 库

c# - 记录类名和方法名的最有效方法是什么?

dependency-injection - 使用 @Inject 将无状态 EJB 注入(inject) CDI Weld ManagedBean(jboss 6 AS 上的 JSF 1.2 EJB 应用程序)

c# - 简单注入(inject)器 : Different DbContext for selected controllers

inversion-of-control - IoC 容器配置

c# - 如何在组合框中添加 2 列?

c# - 如何在C#中设置下载超时

c# - 依赖注入(inject) - 当前上下文中不存在名称 'Bind' - MethodAccessException 未处理

c# - 使用 UsingFactoryMethod 在 Windsor 中进行通用注册

java - 小足迹依赖注入(inject)java