Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MEF导入从给定接口继承的类型_C#_Wpf_Mvvm_Mef_Caliburn.micro - Fatal编程技术网

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

C# 使用MEF导入从给定接口继承的类型,c#,wpf,mvvm,mef,caliburn.micro,C#,Wpf,Mvvm,Mef,Caliburn.micro,[注意,围绕这一主题存在一些问题,但似乎没有一个与此特定案例相匹配的问题] 我有两个ViewModel,它们导出自己的接口类型 [Export(typeof(ITestExplorer))] public class TestExplorerViewModel : Tool, ITestExplorer, IDataErrorInfo, IDisposable { // Implementation. } 及 其中ITicker和ITestExplorer都继承自同一ICoreData

[注意,围绕这一主题存在一些问题,但似乎没有一个与此特定案例相匹配的问题]

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

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

其中
ITicker
ITestExplorer
都继承自同一
ICoreDataProvider
接口

public interface ITicker : ITool, ICoreDataProvider { }

我知道这两个接口本质上是相同的,但是,它们是必需的,因为我正在使用Caliburn micro启动某些视图类型,其中不同的类继承自上述每个类

我的问题是我希望
[ImportMany]
ICoreDataProviders
,但我无法将上述类同时导出为
ITicker
ICoreDataProvider
(或
iteexplorer
ICoreDataProvider
)[在单个属性中多次导出]。我想做什么

[ImportMany]
private IEnumerable<IBetDataProvider> dataProviderCollection;
但我不喜欢这样,因为我需要各种各样的检查,看视图是否打开等等

谢谢你抽出时间

我无法将上述类同时导出为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.
}

不可能,这么简单,我怎么会错过这个!?非常感谢+1.
[ImportMany]
private IEnumerable<IBetDataProvider> dataProviderCollection;
var instances = 
    from t in Assembly.GetExecutingAssembly().GetTypes()
    where t.GetInterfaces().Contains(typeof(ISomething))
         && t.GetConstructor(Type.EmptyTypes) != null
    select Activator.CreateInstance(t) as ISomething;
[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.
}