使用来自另一个MEF程序集的类而不引用它
我有2个MEF组件。 让它成为组件A和组件B.
我需要的是能够从组件A中的组件B访问类而不参考它。 然后我想手动实例化该类的对象。
目前我看到MEF允许使用[Import]自动实例化对象。 它使用需要引用的接口。
我可以使用其他程序集中的数据类型而不引用它吗? MEF是否支持这种机制?
有几种方法可以做到这一点。
首先,您需要定义两个程序集都能理解的公共接口。 这可能是这两个程序集引用的“PublicInterfaces”库,也可能是程序集A内部(B引用A,但不是相反)。
在B中,使用此接口导出类型。
B必须在容器的目录中。 在AssemblyCatalog
显式引用程序集B,或者创建DirectoryCatalog
并将其指向将包含程序集B的目录。
在A中,代替使用Import属性,在代码中调用容器上的GetExportedValue
。 代码看起来像这样:
// 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();
您可以通过reflection实例化一个类,而无需对文件进行硬引用。 你不需要MEF。
然后我想手动实例化该类的对象。
也许您最好通过加载程序集并从中选择所需类型而不是使用MEF来手动完成。