Ninject瞬态范围

时间:2011-04-28 15:34:59

标签: ninject

Ninject瞬态范围仅适用于构建一个类的时刻:

class InjectedClass
{
  [Inject]
  public IClass Instance { get;set;}
}

从InjectedClass方法调用Instance属性将引用同一个IClass实例。是否有可能每次都返回一个新实例?我没有对IKernel的引用。

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要工厂模式。您可以注入工厂对象,然后调用该方法,而不是注入类型的实例。使用一个简单的例子:

 [Inject]
 public ISomeFactory SomeFactory { get; set; }

 public IClass Instance
 {
     get { return SomeFactory.CreateNew(); }
 }

答案 1 :(得分:2)

Does Ninject support Func (auto generated factory)?

加载模块

然后将工厂函数传递给构造函数:

 public ctor(Func<IClass> classFactory)
 {
     this.classFactory = classFactory;
 }

以这种方式创建一个实例:

 this.classFactory();

注意:我认为使用您的问题中的属性将新实例传递给其他人并不是一个好的设计。如果一个类具有这个作为依赖关系的类,您应该在另一个类中使用上面的机制,或者如果只需要一个实例,则使用构造函数注入。