这是开始在mutliple mvc应用程序之间共享代码的合适方式吗?

我们正在为同一家公司开发多个应用程序。

应用程序是不同的(因此不适合多租户应用程序),但会有很多共享模型,几个共享控制器和理想的一些共享视图。

这是我第一次不得不这样做,并想知道我是否正确接近它。 这是我的计划:

  • 为共享内容创建数据库,为应用程序特定内容创建另一个(每个应用程序)

  • 每个应用程序在Web配置中将有2个连接

  • 从共享模型和控制器创建DLL。 将它放在/ bin目录中并在项目中引用它。 我希望这可以近似于nuget包的工作方式,并参考

  • 对于每个应用程序,创建SharedApplicationDBContextLocalApplicationDBContext ,每个都访问相应的DB。


问题

  • 以上步骤是正确的吗?

  • 有没有办法在DLL中包含cshtml视图?

  • 可以在DLL中包含Users控制器/模型吗?

  • 在mutliple应用程序上共享这样的代码时,我应该注意哪些问题?

我知道SO喜欢特定的问题,这有点模糊,但我有点超出我的深度,并寻找一些关于正确方法的一般指导。

你有一般的想法,但它需要一些调整:

  1. 不要愚弄DLL。 如果项目存在于同一个解决方案中,那么您也可以将类库保存在那里。 在这种情况下,您可以直接进行项目参考。 如果您正在处理多个解决方案,那么您将类库打包为nuget包,并将其实际安装在每个项目中。 创建nuget包非常简单 ,您可以从本地/网络路径安装,也可以设置自己的私有nuget仓库 。 这使得共享资源变得非常容易,并且您可以发布更新并快速查看哪些项目正在运行哪个版本的类库。

  2. 每个应用程序应该只具有与其单个数据库相关的上下文。 共享数据库还可以使用共享上下文,该上下文将包含在类库中。 您还应该在同一个类库中容纳与此共享上下文相关的所有迁移。

  3. 您可以在类库中包含视图,但不能包含cshtml。 它们必须编译到类库中。 你需要RazorGenerator才能做到这一点。

  4. 在共享库中包含与用户相关的模型是完全可以的。 但是,控制器比较棘手。 除非您设置一个单独负责处理所有身份validation的SSO服务器(至少可以说是一项非常重要的任务),否则每个应用程序都需要它自己的控制器来进行身份validation任务。 如果所有站点都驻留在相同的域或子域中,您可以轻松地在它们之间共享身份validationcookie。 但是,如果它们将驻留在完全不同的域上,您仍然可以共享相同的“用户”,因为每个站点使用相同的数据库,但每个站点都需要单独的登录过程(登录一个不记录您在另一个,即使相同的凭据将适用于两者)。 唯一的解决办法就是SSO。

有关视图的内容,您可以将它们包含在DLL中,请在此处阅读

对于模型,可以将它们放在不同的项目中。

对于控制器,您可以这样做,但您必须让MVC知道控制器的位置,您可以通过编写自定义ControllerFactory来完成,请在此处阅读更多内容。