我正在使用MEF创建一个可扩展的应用程序,以允许我的客户开发自己的模块和扩展,我有一些特殊的导出,如集成模块,我想阻止其他开发人员导入或重写该模块,请指导我如何做到这一点。
例如:我有IShellService
public interface IShellService
{
// providing the shell functions and properties
}
和DashboardModule的接口
public Interface IDashboardModule {}
在模块中使用IShellService
如下所示:
Export(typeof(IModule))
public MyModule
{
[ImportConstructor]
public MyModule(IShellService shellservice)
{
// ...
}
}
如何确保MyModule
将在构造函数中使用我在Shell中提供的Shell服务,而不是某些模块创建的其他服务,因为可能某些人将导出具有此类型的模块{{ 1}}在这种情况下,IShellService
会混淆两个导出值之间,我希望它是一个导出和一个导入,没有人可以导出此类型。
仪表板模块存在同样的问题,我只想要我的仪表板模块实现(导出)。
答案 0 :(得分:1)
不是mef专家,但您可能需要查看ExportsMetaData属性:“导出可以提供有关其自身的其他信息,称为元数据。元数据可用于将导出对象的属性传递到导入部分。 part可以使用这些数据来决定使用哪些导出,或者收集有关导出的信息而不必构造它。因此,导入必须是懒惰才能使用元数据。“更多信息:https://msdn.microsoft.com/en-us/library/vstudio/ee155691%28v=vs.100%29.aspx#metadata_and_metadata_views