探している controllerName は正しい名前であり、コンテナーには一致する名前のエクスポートが含まれていることがわかっています。なぜか見つからない。プロジェクトの指定したフォルダーに置いた dll からインポートしようとしています。常にデフォルトのコントローラーを返そうとしますが、メイン プロジェクト ディレクトリにないため、dll コントローラーを見つけることができません。controllerFactory が DLL を検出することはわかっていますが、適切に読み込んでいません。
ここに私の CreateController 関数があります:
Public Function CreateController(requestContext As System.Web.Routing.RequestContext,
controllerName As String) As System.Web.Mvc.IController Implements
System.Web.Mvc.IControllerFactory.CreateController
Dim controller As IController = Nothing
If controllerName IsNot Nothing Then
Dim controllerClassName As String = controllerName & "Controller"
Dim controllers As IEnumerable(Of Lazy(Of IController)) = Me.container.GetExports(Of IController)()
Dim controllerExport As Lazy(Of IController) = controllers _
.Where(Function(c) c.Value.GetType.Name = controllerName) _
.FirstOrDefault()
If export IsNot Nothing Then
controller = export.Value
End If
End If
If controller Is Nothing Then
Return Me.defaultControllerFactory.CreateController(requestContext, controllerName)
End If
Return controller
End Function
明確にする必要がある場合は、お知らせください。ありがとう!
編集: リターン Me.defaultControllerFactory.CreateController(requestContext, controllerName) のエラー メッセージは HttpException was unhandled by user code です。コントローラー パス 'CUContractNumberPlugin/ChangeCUNumber' が見つからないか、IController を実装していません。
これがそれが話しているコントローラーです。
<Export(GetType(IController)), ExportMetadata("Name", "CUContractNumberPlugin")> _
Public Class CUContractNumberPluginController
Inherits Controller
<Import(GetType(IHost))>
Private m_hostApp As IHost
Public Function Index() As ActionResult
Return View()
End Function
Function ChangeCUNumber(strCUNumber As String) As ActionResult
m_hostApp.CUNumber = strCUNumber
Return View("Index", m_hostApp)
End Function
End Class
これは、部分ビューをメイン ビューにロードしているときに呼び出されます。部分的なビューは次のとおりです。
@Using (Html.BeginForm("ChangeCUNumber", "CUContractNumberPlungin"))
@Html.TextBox("strCUNumber")
End Using