我创造与MVC3和MEF的Web应用程序。我试图将我的HostModel导出到带有IDNumber的插件,然后让插件重定向到使用该IDNumber的链接。我的模型没有正确导出,然后我的视图也没有从插件控制器读取模型(我通过创建测试模型对象并将其传递给视图来测试此模型)。我很确定我有一些混淆我如何导出到我的插件中的视图。我正在使用.aspx文件而不是.vbhtml,因为VS2010没有给我这个选项。当我尝试将.vbhtml文件拖入项目时,它无法正常工作。导出/导入问题与MEF
这里是我的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
任何帮助,将不胜感激!如果你需要我澄清任何事情,请让我知道!谢谢!
我最终没有注册依赖关系解析器就开始工作。导入ImportData工作正常。我应该修补那些没有损坏的东西吗? – gblock
@gblock:我现在看到容器是在ImportData类中创建的,我在一读时错过了。这可能会起作用,但会导致为每个请求构建目录。这也意味着你不能直接在HostController类中导入任何东西。 –