0

MVC3とMEFを使用してWebアプリケーションを作成しています。HostModelをIDNumberを使用してプラグインにエクスポートしてから、プラグインにそのIDNumberを使用するリンクにリダイレクトさせようとしています。モデルが正しくエクスポートされておらず、ビューもプラグインコントローラーからモデルを読み取っていません(テストモデルオブジェクトを作成してビューに渡すことでこれをテストしました)。プラグインのビューにエクスポートする方法と混同していると確信しています。VS2010でオプションが提供されなかったため、.vbhtmlではなく.aspxファイルを使用しています。.vbhtmlファイルをプロジェクトにドラッグしようとすると、正しく機能しませんでした。

これが私のHostControllerです:

<Export(GetType(HostModel))>
<PartCreationPolicy(CreationPolicy.NonShared)>
Public Class HostController
    Inherits System.Web.Mvc.Controller


    Private m_objHost As HostModel

    Private m_IDNUmber As String
    Property IDNumber() As String
        Get
            Return m_IDNUmber
        End Get
        Set(value As String)
            m_IDNUmber = value
        End Set
    End Property


    Function Index() As ActionResult
        ViewData("Message") = "Welcome to ASP.NET MVC!"
        If m_objHost Is Nothing Then
            m_objHost = New HostModel
        End If
        Return View(m_objHost)
    End Function

    '<HttpPost()>
    Function ChangeCUNumber(model As HostModel, strIDNumber As String) As ActionResult
        ' m_IDNUmber = strIDNumber
        model.IDNumber = strIDNumber
        Return View("Index", model)
    End Function

    <HttpPost()>
    Function GoToMini(model As HostModel) As ActionResult
        m_CUNUmber = model.CUNumber
        Dim hostContollerObj As New HomeController
        hostContollerObj.CUNumber = model.IDNumber

        m_objHost = model
        Return Redirect("http://localhost:3727/miniView")
    End Function
End Class

これは私のHostModelです:

Public Class HostModel
Implements IHost

Private Shared m_instance As HostModel
Private m_IDNumber As String

Public Sub New()
End Sub



Shared ReadOnly Property instance() As HostModel
    Get
        If m_instance Is Nothing Then
            m_instance = New HostModel
        End If
        Return m_instance
    End Get
End Property


Public Property IDNumber As String Implements CUCMCV_Interfaces.IHost.IDNumber
    Get
        Return m_IDNumber
    End Get
    Set(value As String)
        m_IDNumber = value
    End Set
End Property

これは私のプラグインコントローラーです:

<Export(GetType(IPlugin))> _
<ExportMetadata("PluginName", "miniView")> _
<PartCreationPolicy(CreationPolicy.NonShared)> _
Public Class miniViewController
    Inherits System.Web.Mvc.Controller
    Implements IPlugin


    <Import(GetType(HostModel))>
    Private m_objHost As HostModel


    Public Function Index() As ActionResult
        Dim renderedView As ViewResult = View("~/Plugin/miniView.dll/miniView.Index.aspx", m_objHost)

        Return renderedView
    End Function

これは私のプラグインビューです(Index.aspx)

Public Class Index
    Inherits Mvc.ViewPage




    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


        Dim p As ImportData = New ImportData()
        Dim strMINILink As String = "http://inside/mini?ContractNumber="
        Dim strCUNumber As String = p.instance.IDNumber
        Dim strMINIURL As String = strMINILink & strIDNumber
        Response.Redirect(strMINIURL)

    End Sub

End Class

Public Class ImportData

    <Import(GetType(HostModel))>
    Property instance As HostModel

    Public Sub New()
        Dim catalog As AggregateCatalog = New AggregateCatalog()

        catalog.Catalogs.Add(New DirectoryCatalog("C:\Documents and Settings\gbv0860\My Documents\cucmConsolidatedView\CUCMCV\cucmConsolidatedView\cucmConsolidatedView\bin"))
        Dim _container As CompositionContainer = New CompositionContainer(catalog)

        Try
            _container.ComposeParts(Me)

        Catch ex As Exception
            Console.WriteLine(ex.ToString)
        End Try

    End Sub
End Class

どんな助けでも大歓迎です!あなたが私に何かを明確にする必要があるならば、私に知らせてください!ありがとう!

4

1 に答える 1

1

実際には ではないクラスを設定<Export(GetType(HostModel))>しました。これは有効なエクスポートではありません。HostControllerHostModel

HostControllerASP.NET MVCはコントローラーを正確な型で要求するため、<Export>.

<Export(GetType(HostModel))>おそらくHostModelクラスに属しています。独自のシングルトンを実装する代わりに、 でマークするだけ<PartCreationPolicy(CreationPolicy.Shared)>です。

次に、にインポートがあるという事実がありますが、ImportDataそのクラスもエクスポートされず、newステートメントで自分で作成するだけです。したがって、MEF はこれらのインスタンスを認識せず、インポートで何もしません。

最後に、ASP.NET MVC は自動的に MEF を使用してオブジェクトを作成しないことに注意してください。それをセットアップするには、MEF コンテナーをラップする依存関係リゾルバーを登録する必要があります。MEF2 には APS.NET MVCのコンポジション プロバイダーがあるようです。

于 2012-06-21T14:47:40.250 に答える