我有这两个接口和类:
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!!)
:
IVizVisitor<T>
是viz
IViz<T>
IGroupedVizVisitor<T, TKey>
如果viz
是IGroupedViz<T, TKey>
的实例。我想使用NInject
来获取它。我想我可以使用Ninject Factory来获取它,但我还是无法弄清楚如何获得它......
有什么想法吗?
答案 0 :(得分:0)
在这里您可以阅读有关Ninject工厂的信息:
https://github.com/ninject/Ninject.Extensions.Factory/wiki/Factory-interface
我强烈建议您阅读本文:
https://chodounsky.net/2014/01/29/dynamic-dispatch-in-c-number/