如何将singleton作为泛型类型参数传递?

时间:2012-05-02 16:37:49

标签: c# generics singleton factory-pattern

我有一个边缘界面:

public interface IEdge<TPoint, TFactory>
    where TPoint : IPoint
    where TFactory : IEdgeFactory<TPoint>
{
    TPoint Begin { get; }
    TPoint End { get; }
    void Divide();
}

边缘可以分为产生嵌套边缘的边缘。使用工厂模式创建新边:

public interface IEdgeFactory<TPoint>
    where TPoint : IPoint
{
    IEdge<TPoint> Create(TPoint begin, TPoint end)
}

我希望能够在IEdge实现中实例化工厂。通常我会使用ie public static IEdgeFactory<TPoint> Instance { get; }来做,但是我无法在界面中定义它。

那么有没有办法将singleton工厂作为类型参数传递,并为实现提供实例化它的方法?

1 个答案:

答案 0 :(得分:3)

您可以简单地将工厂传递给实现接口的类:

public interface IEdge<TPoint>...

class MyEdge : IEdge<MyPoint>
{
   IEdgeFactory<MyPoint> factory;
   public MyEdge(IEdgeFactory<MyPoint> factory)
   {
      this.factory = factory;
   }
}