让我首先说我是有限的MEF经验,并且之前使用Castle和Unity完成了我的目标。我希望可以用MEF做类似的事情。我可以使用MEF创建一个可扩展的工厂吗?
总之,我需要的是一个工厂类,可以通过名称实例化对象。更具体而言,我将有一个抽象基类如:
public abstract class TheBaseClass { ... }
将有从基类派生的任何数量的子类:
public class OneSubClass : TheBaseClass { ... }
public class AnotherSubClass : TheBaseClass { ... }
在运行时,我需要一个工厂,我可以打电话,传递一个“关键”值,以获得特定的子类的实例返回,如:
var key = "AnotherSubClass";
TheBaseClass instance = TheFactory.CreateInstance(key);
在城堡和团结,我可以注册与“钥匙”作为名称的类型和使用这个值作为查找当试图从容器中解析实例时。我认为我可以使用ExportMetadata完成同样的事情,但我仍然坚持如何做到这一点。
这种方法背后的基本原理是,我需要在运行时实例化一个强类型的子类,而不必在编译时知道该类型,因为应用程序是可扩展的和(导出的)类型可以通过外部组件添加。
任何想法?
虽然我明白枚举的价值,以消除“魔术字符串”的枚举打破了松散耦合(可扩展)模型,因为我不得不添加一个新的字段的枚举每次我想扩展工厂,而不是简单地下降汇编到运行时目录并允许发现填充枚举。除此之外,您的解决方案完全适合我。谢谢! – SonOfPirate