【问题标题】:MEF CompositionContainer Missing ComposeParts Extension methodMEF CompositionContainer 缺少 ComposeParts 扩展方法
【发布时间】:2012-09-07 09:16:18
【问题描述】:

我正在尝试将部件的 MEF 组合抽象为类库类,但我在 .Net4.5 RC 中遇到问题,因为 ComposeParts 扩展方法在类库 CompositionContainer 中不可用

我是不是做错了什么或者缺少参考资料?

WCF 服务类工作容器

<Import(GetType(IGenericModelFactory))>
Public Property ModelFactory As IGenericModelFactory

Private _mefContainer As CompositionContainer
Private _catelog As DirectoryCatalog

Public Sub New()
    _catelog = New DirectoryCatalog(".")
    _mefContainer = New CompositionContainer(_catelog)
    _mefContainer.ComposeParts(Me)
End Sub

类库 - 缺少 ComposeParts 方法

Imports System.ComponentModel.Composition.Hosting

Namespace Core.Composition

    Public Class CompositionBuilder
        Implements IComposeObjects

        Public Function CreateContainer() As CompositionContainer Implements IComposeObjects.CreateContainer
            Return Activator.CreateInstance(Of CompositionContainer)()
        End Function

        Public Sub ComposeFromDirectory(directory As String, compositionRoot As Object) Implements IComposeObjects.ComposeFromDirectory

            Dim catelog As DirectoryCatalog = Activator.CreateInstance(GetType(DirectoryCatalog), directory)
            Dim mefContainer As CompositionContainer = Activator.CreateInstance(GetType(CompositionContainer), catelog)
            mefContainer.Composeparts(compositionRoot)

        End Sub

    End Class

End Namespace

【问题讨论】:

    标签: .net vb.net extension-methods mef .net-4.5


    【解决方案1】:

    看起来你必须包含 System.ComponentModel.Composition 命名空间

    Imports System.ComponentModel.Composition.Hosting
    Imports System.ComponentModel.Composition
    
    Namespace Core.Composition
    
        Public Class CompositionBuilder
            Implements IComposeObjects
    
            Public Function CreateContainer() As CompositionContainer Implements IComposeObjects.CreateContainer
                Return Activator.CreateInstance(Of CompositionContainer)()
            End Function
    
            Public Sub ComposeFromDirectory(directory As String, compositionRoot As Object) Implements IComposeObjects.ComposeFromDirectory
    
                Dim catelog As DirectoryCatalog = Activator.CreateInstance(GetType(DirectoryCatalog), directory)
                Dim mefContainer As CompositionContainer = Activator.CreateInstance(GetType(CompositionContainer), catelog)
                mefContainer.ComposeParts(compositionRoot)
    
            End Sub
    
        End Class
    
    End Namespace
    

    【讨论】:

    • 谢谢,我想通了,但最终删除了 System.ComponentModel.Composition.Hosting 命名空间,意识到两者都需要存在。
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多