Ninject仅在注入IFactory.Create()方法时绑定

时间:2017-09-15 18:51:35

标签: ninject ninject-extensions

我有一个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)传递给工厂方法。

1 个答案:

答案 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;。