【问题标题】:How do I get a new object using Ninject as in this example如本例所示,如何使用 Ninject 获取新对象
【发布时间】:2011-01-24 11:34:35
【问题描述】:

我需要添加一个 IVehicle 类型的项目,该项目在运行时从构造函数注入到 for 循环。

IVehicle vehicle;

for (int i=0;i<=someValue;i++)
{
   list.insert(i,vehicle);
   //some processing to assign values
}

现在因为此时 Ivehicle 已经注入,我的列表具有相同的值,尽管视图上的值不同并且来自控制器。我怎样才能每次都新建这个对象

编辑

每次我发现新对象的最佳方法是从注入它的内核请求新对象。如前所述,我正在使用 Ninject。

我所做的只是使用创建一个 IKernel 类型的变量并让构造函数注入它,然后我使用 kernel.Get() 来获取一个新实例。不知道这是否是最好的方法,因为我的构造函数真的很贪婪。 :)

私有IKernel_kernel;

在构造函数中注入这个,不需要做任何绑定,因为 Ninject 已经知道了。

然后你可以使用 _kernel 来获取新的,通过使用 _kernel.Get()。

希望这对某人有所帮助..

【问题讨论】:

  • 考虑更详细地描述您的问题。你想添加一些价值乘以一辆车还是什么?

标签: c# object ninject new-operator


【解决方案1】:

这种情况下最好的方法是注入Func&lt;IVehicle&gt;。并在下面添加绑定。这样你就不会在生产代码中引用 Ninject。此外,这种工厂方法计划被添加到 Ninject 的下一个版本中。下面的绑定将不再需要。

Bind<Func<IConfigurationView>>().ToMethod(ctx => (() => ctx.Kernel.Get<IConfigurationView>()));

【讨论】:

  • 抱歉,您能否举个例子,我将如何在 for 循环中进行操作。我在 global.asax 中进行绑定。但是我在 Mvc 应用程序的控制器中使用它,我需要在 for 循环中新建对象。非常感谢
  • 请参阅msdn.microsoft.com/en-us/library/bb534960.aspx,了解 Func 的工作原理。正如我所说,只需将此委托注入您的控制器并在需要新实例时调用它。
  • 我知道 Func 的工作原理并且一直在使用它。我不太了解的是 Ninject 如何一直将其指向相同的内存位置,何时需要新的,以及最好的方法是什么。我知道我将它委托给一个函数,但它会指向新的内存位置吗……我要求的是一个例子。我的庞大框架中有两个级别的绑定,因此想要一个快速示例来确保这件事,然后再开始更改它..
  • Func 每次调用时都会使用 ninject 创建一个新实例。它基本上是一个新的。试试吧!
  • 我会试一试,并更新并标记答案,我担心的是它是否在 webapp 中有任何副作用......你能否也给我一个条件绑定的快速示例,所以如果我有一个接口 ISomething,我希望它将它绑定到基于 T 是什么的东西..这也进一步来自 ninject..再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多