如何让Ninject执行我定义的工厂来创建我的对象?

时间:2016-02-10 07:02:23

标签: ninject

我可以让Ninject执行我定义的工厂,以便创建下面的对象B吗?

我能想到的一种方法是改变Foo的API,如下所示:

class Foo
{
  public Foo(Bar b) { }

  // change API to introduce a new ctor
  [Inject]
  public Foo(Func<Bar> func) { }
}

class Bar { }

Ninject 3.2中是否有内置API可以让我这样做?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

Bind<Bar>().ToMethod(ctx => ... your factory code/call...);

然后只需将Bar注入foo:

class Foo
{
    public Foo(Bar b) { }
}

如果您需要控制创建Bar的时间 - 所以如果您的代码需要专门致电工厂 - 您可以使用Ninject.Extensions.Factory。将Func<Bar> barFactory注入Foo并使用它来创建实例。