如何使用Ninject获取新对象,如本例所示

时间:2011-01-24 11:34:35

标签: c# object ninject new-operator

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

IVehicle vehicle;

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

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

修改

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

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

private IKernel _kernel;

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

然后你可以使用_kernel.Get&lt;&gt;()来使用_kernel来获取新内容。

希望这有助于某人..

1 个答案:

答案 0 :(得分:2)

此方案的最佳方法是注入Func<IVehicle>。并在下面添加绑定。这样你就不会在生产代码中引用Ninject了。此外,这种工厂方法计划被添加到Ninject的下一个版本中。下面的绑定将不再是必要的。

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