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

How do I have Ninject execute a factory I define to create my object?

我可以让 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 让我这样做?

您可以执行以下操作:

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

然后将 Bar 注入 foo:

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

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