【发布时间】:2011-08-21 06:27:51
【问题描述】:
我正在编写一个利用 Zack Owens 概述的多租户的应用程序。
在 Zack 的示例中,他有单独的 c# 类库来存储每个租户的控制器和视图。由于我没有使用已编译视图的 Spark View 引擎,因此这不是一个选项。相反,我为每个租户创建了一个单独的 MVC3 应用程序项目,并在其中存储内容、控制器、视图等。
我有一个主 MVC 应用程序项目(它是启动应用程序),它带有一个自定义控制器工厂,它扫描类似于 Zacks 示例的程序集并使用结构映射设置依赖注入。我有一个视图引擎,它使用控制器上下文来获取正确的视图。如果在租户应用程序中找不到视图或依赖项,它将使用我们主 MVC 应用程序项目中的视图或依赖项。除了视图模型之外,一切都很棒。
我们的大部分(如果不是全部)视图都传递给视图模型。我希望 View Model 类驻留在租户应用程序项目中,而不是主应用程序项目中,以便租户可以拥有自定义视图模型以配合他们的自定义视图。
它似乎可以工作,但我不断收到错误。
场景 #1 - 默认视图模型驻留在主 MVC 应用程序项目中。租户应用程序具有对主应用程序的引用,因此可以使用默认视图模型。没问题。现在,当我想添加视图模型或覆盖视图模型时,我会创建类并将其放入租户应用程序中。问题是当您调用页面时,主 MVC 应用程序找不到新的视图模型,因为主应用程序没有对租户应用程序的引用,并且它们不能是由于循环引用问题。
场景 #2 - 我从租户应用程序中删除了对主应用程序的引用。然后我将默认视图模型从主应用程序复制到租户应用程序,更改命名空间,并创建从主应用程序到租户应用程序的引用,以便主应用程序可以访问视图模型类。
然后我运行它并得到以下错误:
传入字典的模型项是“Sample.Models.Login”类型的,但该字典需要一个“Sample.Models.Login”类型的模型项。
这个错误是有道理的,但不是真的。我只有一个名为 Sample.Models.Login 的类
我对为什么会这样做有一些假设,但我无法弄清楚。任何提示或建议将不胜感激。
谢谢
【问题讨论】:
-
仅供参考,您可以编译您的观点。右键单击项目以将其卸载,然后右键单击以编辑它,然后将第一组 (MvcBuildViews) 中的最后一项设置为 true 而不是 false。保存并重新加载项目并编译。
标签: asp.net-mvc asp.net-mvc-3 multi-tenant