【问题标题】:How to Prevent Other Modules from Importing some Exported Values?如何防止其他模块导入一些导出的值?
【发布时间】:2015-05-17 07:01:23
【问题描述】:

我正在使用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 服务,而不是某些模块创建的其他服务,因为可能有人会在其中导出具有此类型IShellService 的模块在这种情况下,MEF 会在两个导出值之间混淆,我希望它是一个导出和一个导入,没有人可以导出这种类型。

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

【问题讨论】:

  • 您必须向我们提供程序的基本布局,您希望开发人员可以访问哪些部分以及他们不应访问哪些部分。
  • @eranotzap 我编辑了这个问题,谢谢。

标签: c# wpf module mef extensibility


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多