c#虚拟通用工厂方法

时间:2017-04-17 09:26:38

标签: c# generics inheritance factory-method

我有一个项目,其基础组件使用工厂类。对于使用该基本程序集的每个子项目,我将覆盖每个子类型的工厂方法,如下所示:

// BASE FACTORY IN BASE ASSEMBLY
public class InitFactory : InitFactoryBase {
  public static InitFactoryBase Initializer = new InitFactoryBase();
  //
  public virtual BaseObject newBaseObject1() { return new BaseObject1(); }
  public virtual BaseObject newBaseObject2() { return new BaseObject2(); }
}

public class BaseObject1 {....}
public class BaseObject2 {....}


// PROJECT MAIN FUNCTION
[STAThread]
static void Main() {
   // make sure the initializer we use is the one defined in our project...
   InitFactoryBase.Initializer = new InitFactory();
   [....]
}
// MY_PROJECT USING BASE ASSEMBLY
public class InitFactory : InitFactoryBase {
  public virtual BaseObject newBaseObject1() { return new MyObject1(); }
  public virtual BaseObject newBaseObject2() { return new MyObject2(); }
}
public class MyObject1 : BaseObject1 {....}
public class MyObject2 : BaseObject2 {....}

基本上,我的“InitFactory”是一个虚拟工厂类,可以在项目中覆盖以使用特定于项目的派生对象。请注意,它不是抽象的,因为它不能来自,这是故意的。

现在这非常麻烦,因为我有许多类型为“MyObject1”的派生类,这使得很难正确维护代码。

这里的关键是我想用项目中的派生类型“替换”程序集中的基类型,并在需要的地方转换元素。

我很确定使用泛型或我不知道的任何其他方法有更好的方法。有什么建议吗?

0 个答案:

没有答案