MEF框架学习之旅(二)契约
注意:默认一个类型会被用作契约,而不是一个字符串。虽然契约可以作为一个任意的字符串,但这会导致多义性。例如:“Sender"可能会被另一个项目不同类库里面的"Sender"所覆盖。所以如果你需要指定一个字符串契约,建议你契约的命名应该用命名空间来规范,包括公司名称,例如:"Contoso.Exports.Sender".
按照上面的代码说明,所有的导出应该是这样的:
代码段
namespace MEFSample { [Export] public class Exporter {...} [Export(typeof(Exporter))] public class Exporter1 {...} [Export("MEFSample.Exporter")] public class Exporter2 {...} }
默认情况下,Export 特性将成员的具体类型用作约定。您还可以通过向特性构造函数传递参数来显式指定约定。通常模式是让组成部件显式去导出一个接口或一个抽象类型契约而不是一个具体的类型。这样就可以让导入者完全从导出的特定的实现中解耦。
相关阅读: