【问题标题】:Ninject bind only when injected into IFactory.Create() methodNinject 仅在注入 IFactory.Create() 方法时绑定
【发布时间】:2018-02-25 00:23:17
【问题描述】:

我有一个派生自IFooFoo 类,然后是我通过Ninject Factory Extensions 方法设置的IFooFactory

Bind<IFooFactory>().ToFactory()

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

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

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

我后来打电话给fooFactory.Create()。不幸的是,Ninject 对绑定不满意并抛出“没有可用的匹配绑定..”异常。

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

【问题讨论】:

    标签: ninject ninject-extensions


    【解决方案1】:

    我看起来你绑定 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”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多