首页 文章

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

提问于
浏览
0

我有一个 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 回答

  • 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” .

相关问题