我可以让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可以让我这样做?
答案 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
并使用它来创建实例。