我有一个项目,其基础组件使用工厂类。对于使用该基本程序集的每个子项目,我将覆盖每个子类型的工厂方法,如下所示:
// 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”的派生类,这使得很难正确维护代码。
这里的关键是我想用项目中的派生类型“替换”程序集中的基类型,并在需要的地方转换元素。
我很确定使用泛型或我不知道的任何其他方法有更好的方法。有什么建议吗?