我正在编写一个利用多租户的应用程序,如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