在MEF中导入零件很容易。
[ImportMany(typeof(IModule))]
public List<IModule> Modules {get; set;}
但是shell应用程序需要能够为这些部分提供一些服务。
例如,shell应用程序可以访问数据层,了解身份验证和授权等...
是否有一个简单的解决方案。 (也许这真是一个明智的选择?)任何最佳实践?
答案 0 :(得分:2)
为什么不导出这些服务?
[Export(typeof(IMyService))]
public class MyService : IMyService
{
...
}
如果服务绑定到shell并且shell负责配置它,那么您可以将其导出为shell属性;在这种情况下,您需要从MyService
类中删除导出属性并具有以下内容:
public class Shell : Window
{
[Export]
public IMyService MyService
{
get
{
MyService service = new MyService();
// initialize service
return service;
}
}
}
然后每个部分都可以导入和使用它们。
[ModuleExport(typeof(MyModule))]
public class MyModule : IModule
{
[Import]
public IMyService MyService { get; set; }
}
通过这种方式,您可以知道shell在导入时配置了该服务。