使用另一个MEF程序集中的类而不引用该程序集
本文关键字:程序集 引用 集中 另一个 MEF 程序 | 更新日期: 2023-09-27 17:58:56
我有两个MEF组件。让它是成分A和成分B。
我需要的是能够从组件a中的组件B访问一个类,而不必引用它。然后我想手动实例化该类的对象。
目前我看到MEF允许使用[Import]自动实例化对象。它使用需要参考的接口。
我可以使用其他程序集的数据类型而不引用它吗?MEF是否支持这种机制?
您可以通过反射实例化类,而无需对文件进行硬引用。你不需要MEF。
有几种方法可以做到这一点。
首先,您需要定义一个两个程序集都能理解的通用接口。这可能是这两个程序集都引用的"PublicInterfaces"库,也可能在程序集a内部(B引用a,但不是相反)。
在B中,使用此接口导出类型。
B必须在容器的目录中。要么在AssemblyCatalog
中显式引用程序集B,要么创建DirectoryCatalog
并将其指向将包含程序集B的目录。
在A中,不使用Import属性,而是在代码中调用容器上的GetExportedValue<T>()
。代码看起来像这样:
// Known by A and B
public interface CommonInterface
{
// ...
}
// In B, not A
[Export(typeof(CommonInterface))]
public class BClass : CommonInterface
{
// ...
}
// In A where you want to manually create class B
CommonInterface objB = _container.GetExportedValue<CommonInterface>();
然后我想手动实例化类的对象。
也许您最好手动加载程序集并从中选择所需的类型,而不是使用MEF。