如何防止其他模块导入某些导出的值?

时间:2015-05-17 07:01:24

标签: c# wpf module mef extensibility

我正在使用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会混淆两个导出值之间,我希望它是一个导出和一个导入,没有人可以导出此类型。

仪表板模块存在同样的问题,我只想要我的仪表板模块实现(导出)。

1 个答案:

答案 0 :(得分:1)

不是mef专家,但您可能需要查看ExportsMetaData属性:“导出可以提供有关其自身的其他信息,称为元数据。元数据可用于将导出对象的属性传递到导入部分。 part可以使用这些数据来决定使用哪些导出,或者收集有关导出的信息而不必构造它。因此,导入必须是懒惰才能使用元数据。“更多信息:https://msdn.microsoft.com/en-us/library/vstudio/ee155691%28v=vs.100%29.aspx#metadata_and_metadata_views