2017-09-15 57 views
0

我有一个Foo类,从IFoo派生,然后一个IFooFactory绑定,我通过Ninject Factory Extensions方法设置:Ninject只有当注入IFactory.Create()方法

Bind<IFooFactory>().ToFactory() 

然后我要确保任何调用者类通过IFooFactory.Create()获取IFoo实例,而不是在构造函数中请求IFoo

我试图创建一个像这样绑定:

Bind<IFoo>.To<Foo> 
      .WhenInjectedInto<IFooFactory>(); 

然后我再打fooFactory.Create()上。不幸的是,Ninject对绑定不满意,并抛出一个“No matching bindings are available ..”异常。

当我有一个Foo(string str)构造函数的字符串依赖关系通过IFooFactory.Create(string str)传递给工厂方法时,我也遇到了同样的问题。

回答

0

我看起来像你绑定IFoo错误。你要做的:

Bind<IFoo>().To<Foo>(); 

使fooFactory.Create()知道如何解决IFoo。现在,IFoo只有在注入IFooFactory时才会得到解决,并且该实例由工厂扩展自动生成(我甚至不确定您可以在接口上使用WhenInjectedInto)。

如果你只希望能够解决IFoo:从工厂S,你可以使用命名绑定:

Bind<IFoo>().To<Foo>().Named("Foo"); 

工厂扩展有一个约定,如果你的工厂方法是这样的:

public interface IFooFactory 
{ 
    IFoo GetFoo(); 
} 

它将在解析绑定时使用“Get”作为名称。在这种情况下,“Foo”。