使用MEF导入从给定接口继承的类型

时间:2015-11-07 14:12:05

标签: c# wpf mvvm mef caliburn.micro

[注意有关此主题的问题,但没有一个看似与此特定情况相符]

我有两个ViewModel导出他们自己的接口类型

[Export(typeof(ITestExplorer))]
public class TestExplorerViewModel : Tool, ITestExplorer, IDataErrorInfo, IDisposable
{
    // Implementation.
}

[Export(typeof(ITicker))]
public class TickerViewModel : Tool, ITicker, IDataErrorInfo
{
    // Implementation.
}

ITickerITestExplorer都来自同一个ICoreDataProvider界面

public interface ITicker : ITool, ICoreDataProvider { }

public interface ITestExplorer : ITool, ICoreDataProvider { }

我知道这两个接口本质上是相同的,但是,它们是必需的,因为我使用Caliburn micro来启动某些视图类型,其中包含从上面的每一个继承的不同类。

我的问题是我希望[ImportMany] ICoreDataProviders,但我无法将上述类导出为ITickerICoreDataProvider(或{{1} }和ITestExplorer)[单个属性中的多个导出]。我想做

ICoreDataProvider

但我无法将导出类型切换为[ImportMany] private IEnumerable<IBetDataProvider> dataProviderCollection; ,因为它们目前用于启动视图等。

  1. 我可以要求MEF导入&#34;所有实现ICoreDataProvider&#34;的类型,还是导出必须是明确的?
  2. 如果上面的答案是&#34;是&#34;,怎么样?如果&#34; no&#34;,是否有其他方式使用MEF?
  3. 我知道我可以通过类似

    之类的反射来捏造这个
    ICoreDataProvider

    但我不喜欢这样,因为我需要对视图是否开放等进行各种检查。

    感谢您的时间。

1 个答案:

答案 0 :(得分:4)

  

我无法将上述类导出为ITicker和ICoreDataProvider ... [单个属性中的多个导出]

您可以将它们作为两个界面导出,只需添加两次导出属性。

[Export(typeof(ITestExplorer))]
[Export(typeof(ICoreDataProvider))]
public class TestExplorerViewModel : Tool, ITestExplorer, IDataErrorInfo, IDisposable
{
    // Implementation.
}

[Export(typeof(ITicker))]
[Export(typeof(ICoreDataProvider))]
public class TickerViewModel : Tool, ITicker, IDataErrorInfo
{
    // Implementation.
}