我正在使用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);
这是否可能,或者我是否应该有一个跟踪实例的课程?
任何帮助将不胜感激,谢谢!