NInject:根据对象实例类动态创建实例

时间:2017-10-23 15:30:49

标签: c# .net ninject

我有这两个接口和类:

interface IViz<T> {
   R Accept<R>(IVizVisitor<T, R> visitor);
}
interface IGroupedViz<T, TKey> : IViz<T> {
   R Accept<R>(IGroupedVizVisitor<T, TKey, R> visitor);
}

class Viz<T> : IViz<T> {}
class GroupedViz<T, Tkey> : IGroupedViz<T, TKey> {}

我还创建了两个visitor接口:

interface IVizVisitor<T, R> {
    R Visit(IViz<T> viz);
}

interface IGroupedVizVisitor<T, TKey, R> : IVizVisitor<T, R> {
    R Visit(IGroupedViz<T, TKey> group);
    //...
}

因此,我需要根据IVizVisitor<T>IGroupedVizVisitor<T, TKey>实例创建IViz<T>IGroupedViz<T,TKey>的实例。

示例:

static void Main(VizFactory vizFactory) {
    IList<IViz<MyT>> vizs = new List<IViz<MyT>>();
    vizs.add(new Viz<MyT>());
    vizs.add(new GroupedViz<T, string>());

    foreach (IViz<MyT> viz in vizs) {
      //(!!1!!)
      //IVizVisitor<MyT> visitor = vizFactory.GetVisitor(??????);
      //get an `IVizVisitor<T>` or an `IGroupedVizVisitor<T, TKey>`
      viz.Accept(visitor);
    }
}

我想继续(!!1!!)

  1. 如果IVizVisitor<T>viz
  2. 的实例,则为IViz<T>
  3. IGroupedVizVisitor<T, TKey>如果vizIGroupedViz<T, TKey>的实例。
  4. 我想使用NInject来获取它。我想我可以使用Ninject Factory来获取它,但我还是无法弄清楚如何获得它......

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在这里您可以阅读有关Ninject工厂的信息:

https://github.com/ninject/Ninject.Extensions.Factory/wiki/Factory-interface

我强烈建议您阅读本文:

https://chodounsky.net/2014/01/29/dynamic-dispatch-in-c-number/