Import MEF仅在某些外部库满足以下条件时导出/导入

Import MEF仅在某些外部库满足以下条件时导出/导入,import,export,mef,dllimport,Import,Export,Mef,Dllimport,有没有办法告诉MEF只有在满足其他依赖dll/库的情况下才尝试加载dll?我正在尝试编写一个依赖于另一个扩展的扩展。我希望能够检查是否存在其他扩展,而不仅仅是尝试加载我的扩展。有可能吗?我已经了解了如何使用以下代码(在StackOverflow上的某个地方找到)检查某些dll是否存在: 现在,我希望能够只加载那些满足依赖性的DLL/扩展。MEF通过拒绝自然做到这一点。假设您只希望在存在扩展B的情况下加载扩展A。这大概是因为扩展A依赖于扩展B提供的某些功能。在MEF中表达这一点的方法是通过导入(基

有没有办法告诉MEF只有在满足其他依赖dll/库的情况下才尝试加载dll?我正在尝试编写一个依赖于另一个扩展的扩展。我希望能够检查是否存在其他扩展,而不仅仅是尝试加载我的扩展。有可能吗?我已经了解了如何使用以下代码(在StackOverflow上的某个地方找到)检查某些dll是否存在:


现在,我希望能够只加载那些满足依赖性的DLL/扩展。

MEF通过拒绝自然做到这一点。假设您只希望在存在扩展B的情况下加载扩展A。这大概是因为扩展A依赖于扩展B提供的某些功能。在MEF中表达这一点的方法是通过导入(基数ExactlyOne,即不是集合导入,也不是可选的)

因此,扩展A应该有一个所需的导入,该导入由扩展B的导出来满足。如果扩展B不存在,那么导入将无法满足,扩展A将被拒绝,从而导致它在容器中不可用


我在我的博客文章中对此做了进一步解释:。

很有趣!从未想过导入其他扩展。但是如果我无法控制我将要使用的另一个扩展呢?我的意思是说,它不导出自身,只提供我希望能够订阅的服务(事件)。有没有办法处理我不能简单地“导入”的情况?@chown扩展不必直接导出自身。它可以导出服务(通过实现服务或通过属性导出)。或者您是说您无法控制代码,无法将导出添加到该扩展?因此您是说您编写了一个依赖于本机DLL的程序集,如果本机DLL丢失,您希望MEF忽略此程序集?
        [DllImport("kernel32", SetLastError = true)]
        static extern IntPtr LoadLibrary(string fileName);
        static bool CheckLibrary(string fileName)
        {
            return LoadLibrary(fileName) != IntPtr.Zero;
        }