NInject:使用两个参数解析构造函数注入

时间:2016-10-14 12:47:05

标签: c# ninject

我已经创建了这些接口和类:

interface IInterpreter.
interface IViz.
interface IVizDescriptor.

其中,

class IntOne : IInterpreter.

class VizDescOne : IVizDescriptor {
    VizDescOne(string title, Type type, SchemaType schemaType, string desc)
    { }
}

class VizOne : IViz {
    public VizOne (IntOne, IVizDescriptor)
    {
    }
}

我已经发现我能够在IInterpreterIntOne之间创建绑定,以便在我申请VizOne时, IntOne被注入第一个参数构造函数。

问题是没有办法为VizDescOne创建合适的绑定。 VizDescOne的构造函数参数过于依赖于每种情况,我无法为其创建绑定。

是否有某种方法可以提供manually并解析VizOne (IntOne, IVizDescriptor)构造函数?

然而,IVizDescriptor过于依赖任何具体情况

1 个答案:

答案 0 :(得分:1)

你有很多选择:

  1. 您可以使用构造函数将IVizDescriptor绑定到VizDescOne 参数:

    kernel.Bind<IVizDescriptor>().To<VizDescOne>()
          .WithConstructorArgument("title", "someTitle").WithConstructorArgument("type", typeof(int))...
    
  2. 您可以将IVizDescriptor绑定到常量:

    IVizDescriptor vizDescOne = new VizDescOne(...);
    kernel.Bind<IVizDescriptor>().ToConstant(vizDescOne);
    
  3. 您可以将IVizDescriptor绑定到方法:

    kernel.Bind<IVizDescriptor>().ToMethod(o=> new VizDescOne(...));
    
  4. 您可以详细了解这些选项以及更多herehere

    作为旁注,我建议你阅读@Steven评论和他链接的文章,因为如果构造函数参数是运行时值,你应该重新考虑你的设计。