C# 使用MEF导入从给定接口继承的类型
[注意,围绕这一主题存在一些问题,但似乎没有一个与此特定案例相匹配的问题] 我有两个ViewModel,它们导出自己的接口类型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
[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.
}