我有一个 Foo
类派生自 IFoo
,然后是 IFooFactory
,我通过Ninject Factory Extensions方法设置:
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)
传递给工厂方法 .
1 回答
我看起来你绑定IFoo错了 . 你必须做:
使
fooFactory.Create()
知道如何解决IFoo
. 就像现在一样,IFoo
只会在注入IFooFactory时得到解决,并且该实例由工厂扩展自动生成(我甚至不确定你可以在接口上使用WhenInjectedInto
) .如果您只想从工厂解析
IFoo
:s,则可以使用命名绑定:工厂扩展有一个约定,如果您的工厂方法如下所示:
在解析绑定时,它将使用“Get”后面的任何内容作为名称 . 在这种情况下“Foo” .