我有一个Foo
类派生自IFoo
,然后是IFooFactory
,我通过Ninject Factory Extensions方法设置:
Bind<IFooFactory>().ToFactory()
然后,我想确保所有调用者类通过IFoo
获得IFooFactory.Create()
实例,而不是仅仅在构造函数中请求IFoo
。
我试图像这样创建一个绑定:
Bind<IFoo>.To<Foo>
.WhenInjectedInto<IFooFactory>();
然后我打电话给fooFactory.Create()
。不幸的是,Ninject对绑定并不满意,因此没有匹配的绑定。&#34;异常。
当我有一个Foo(string str)
构造函数时,我也遇到了同样的问题,它的字符串依赖性通过IFooFactory.Create(string str)
传递给工厂方法。
答案 0 :(得分:0)
我看起来你绑定了IFoo错误。你必须这样做:
fooFactory.Create()
让IFoo
知道如何解决IFoo
。就像现在一样,WhenInjectedInto
只有在注入到IFooFactory时才会被解析,并且该实例由工厂扩展自动生成(我甚至不确定你可以在接口上使用IFoo
。) / p>
如果您只想从工厂解析Bind<IFoo>().To<Foo>().Named("Foo");
:s,则可以使用命名绑定:
public interface IFooFactory
{
IFoo GetFoo();
}
工厂扩展程序有一个约定,如果您的工厂方法如下所示:
try:
print("Found bot on port %d" % port)
conn.connect(("localhost", port))
sconn = StealthConn(conn, client=True)
return sconn
except socket.error:
print("No bot was listening on port %d" % port)
port += 1
它将使用以下任何内容&#34; Get&#34;作为解析绑定时的名称。在这种情况下&#34; Foo&#34;。