• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

如何使用托管扩展框架(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

Public Interface IExtensionMetadata

ReadOnly Property MenuCaption() As String

End Interface现在创建使接口并行的属性。该属性需要匹配元数据接口。虽然不需要执行这一接口,但是这是使其同步的最简单的方法:

AttributeTargets.Class)> _
Public Class ExtensionMetadataAttribute
Inherits Attribute
Implements IExtensionMetadata
Private mMenuCaption As String
Public Sub New(ByVal menuCaption As String)
mMenuCaption = menuCaption
End Sub
Public ReadOnly Property MenuCaption() _
As String Implements IExtensionMetadata.MenuCaption
Get
Return mMenuCaption
End Get
End Property
End Class

你的客户可以用属性来装配自己的扩展:

_

_

Partial Public Class First

你可以用替换主窗口中Import请求的方法来利用该元数据以便包含第二个类型参数:

_

Private exportExtensions As ExportCollection( _

Of IExtension, IExtensionMetadata)

这样就提供了强类型的MetadataView以简化对输出元数据的访问:

newItem.Header = export.MetadataView.MenuCaption

虽然窗口可以显示了但是还不能与其他窗口或应用程序互动。下一步很容易,因为MEF使得扩展与主机间没有区别而同时也解决了Import和 Export属性的问题。下载的中的示例使用传统接口为主机扩展提供字符串。你的应用程序或许可以提供更为先进的功能,如上层窗口。

重新编译了非引用组件和一个可组合应用程序的编译器快捷方式不会保存引用。在测试应用程序前用Rebuild Solution避免过期组件的问题。

MEF类似于System.Addln,即所谓的MAF。MAF的使用更为复杂,但是可以解决孤立隔离和版本化等额外的问题。MEF扩展在主机的AppDomain中运行。这意味着使用MEF的时候,你必须相信扩展不会运行恶意代码或通过代码访问安全为其提供保护。MAF通过在单独 AppDomain中创建扩展解决问题。

你正在维护发布到客户端的接口。如果改变接口,就会破坏他们的代码。相反,你可以创建新的接口,使之前的接口完好无损。MEF本身是可扩展的。如果你遇到版本化问题或AppDomain隔离问题猫腻可以创建一个额外的编程模式来结合MEF和MAF。

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ