我正在編寫一個利用多租戶的應用程序,如Zack Owens所述。多租戶MVC 3查看模型的應用程序問題
在Zack的例子中,他有單獨的c#類庫來存儲每個租戶的控制器和視圖。由於我沒有使用編譯視圖的Spark View引擎,因此這不是一個選項。相反,我爲每個租戶創建了一個獨立的MVC3應用程序項目,並且在那裏存儲內容,控制器,視圖等。
我有一個自定義控制器工廠的主MVC App項目(這是啓動應用程序)它掃描與Zacks示例相似的程序集,並使用結構圖設置依賴注入。我有一個視圖引擎,它使用控制器上下文來獲取正確的視圖。如果它在租戶應用程序中找不到視圖或依賴項,它將使用我們的主MVC應用程序項目中的視圖或依賴項。除了viewmodels之外,一切都很棒。
我們大部分(如果不是全部)視圖都通過了視圖模型。我希望View Model類駐留在租戶應用程序項目中,而不是在主應用程序項目中,因此租戶可以使自定義視圖模型與自定義視圖一起使用。
它似乎會工作,但我不斷收到錯誤。
場景#1 - 默認的視圖模型駐留在主MVC應用程序項目中。租戶應用程序具有對主應用程序的引用,因此可以使用默認的查看模型。沒問題。現在,當我想添加視圖模型或覆蓋視圖模型時,我創建了該類並將其放入租戶應用程序中。問題在於,當您調用頁面時,主MVC應用程序無法找到新的查看模型,因爲沒有從主應用程序到租戶應用程序的引用,並且它們不能歸因於循環引用問題。
場景#2 - 我將租戶應用的引用從主應用移除。然後,我將默認視圖模型從主應用程序複製到租戶應用程序,更改命名空間並創建從主應用程序到租戶應用程序的引用,以便主應用程序可以訪問視圖模型類。
我然後運行它,並收到以下錯誤:
傳遞到字典的模型產品類型「Sample.Models.Login」,但這部詞典需要類型「Sample.Models的模型項目。登錄'。
錯誤是有道理的,但不是真的。我只有一個名爲Sample.Models.Login
我有一些假設,爲什麼這可能會這樣做,但我不明白。任何提示或建議將不勝感激。
謝謝你
僅供參考,您可以編譯您的觀點。右鍵單擊項目以卸載它,然後右鍵單擊編輯它,然後將第一組中的最後一項(MvcBuildViews)設置爲true而不是false。保存並重新加載項目並編譯。 – 2011-05-08 22:16:03