.NET Prism + MEF获取所有类型的实例

时间:2015-03-04 01:05:13

标签: .net prism mef

我正在使用Prism 5.0和MEF进行模块化应用程序,并且我很难在通用接口的应用程序中创建所有实例。

我有一个通用的 IDataService<T> 接口

 public interface IDataService<T>
 {
    ...
 }

然后我有一个基类 DataServiceBase<T> 来实现这个通用接口。

public abstract class DataServiceBase<T> : IDataService<T>
{
    ...
}

基类的实施 DataService<T>

[Export(typeof(IDataService<>))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public sealed class DataService<T> : DataServiceBase<T> 
{
    ...
}

其他类将特定的依赖项注入构造函数中,如下所示:

[ImportingConstructor]
public SubmenuViewModel(IDataService<SubmenuItemModel> dataService)
{
    ...
}

当应用程序关闭时,我想要检索由 IDataService<T> 创建的所有实例,并在其上调用 Save() 方法。我尝试了几个不同的东西,但我得到一个空数组或1个实例,我相信它是一个新实例而不是现有实例。

// This returns an empty array.
var d = this.Container.GetExports(typeof(IDataService<>), null, null); 
// This return 1 instance.
var z = this.Container.GetExports(typeof(IDataService<object>), null, null);

我还尝试创建基本界面 IDataService ,并让 IDataService<T> 继承它。然后将 DataService<T> 导出为 IDataService IDataService<T> ,但也没有任何成功。

var z = this.Container.GetExports(typeof(IDataService), null, null);

这是否可能,或者我是否应该有一个跟踪实例的课程?

任何帮助将不胜感激,谢谢!

0 个答案:

没有答案