C# 这是开始跨多个mvc应用程序共享代码的合适方式吗?

C# 这是开始跨多个mvc应用程序共享代码的合适方式吗?,c#,asp.net-mvc,dll,shared-libraries,C#,Asp.net Mvc,Dll,Shared Libraries,我们正在为同一家公司开发多个应用程序 应用程序是不同的(因此不适合多坦能应用程序),但会有很多共享模型、几个共享控制器,理想情况下还有一些共享视图 这是我第一次不得不这样做,不知道我是否正确地接近它。以下是我的计划: 为共享内容创建一个DB,为特定于应用程序的内容创建另一个DB(每个应用程序) 每个应用程序在web配置中将有2个连接 从共享模型和控制器创建DLL。将其放在/bin目录中,并在项目中引用它。我想让它近似于nuget包的工作方式,并参考 为每个应用程序创建一个SharedAppli

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

应用程序是不同的(因此不适合多坦能应用程序),但会有很多共享模型、几个共享控制器,理想情况下还有一些共享视图

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

  • 为共享内容创建一个DB,为特定于应用程序的内容创建另一个DB(每个应用程序)

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

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

  • 为每个应用程序创建一个
    SharedApplicationDBContext
    和一个
    LocalApplicationDBContext
    ,每个应用程序访问各自的数据库


问题

  • 上述步骤是正确的吗

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

  • 在DLL中包含用户控制器/模型可以吗

  • 在多个应用程序上共享这样的代码时,有没有什么值得注意的地方


我知道SO喜欢具体的问题,这有点含糊不清,但我在这里有点深不可测,正在寻找一些关于正确方法的一般指导。

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

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


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

您已经了解了总体思路,但需要进行一些调整:

  • 不要胡闹DLL。如果项目存在于同一个解决方案中,那么您也可以将类库保留在那里。在这种情况下,您可以直接进行项目引用。如果您正在处理多个解决方案,那么您可以将类库打包为一个nuget包,并在每个项目中实际安装它。创建nuget包是一个简单的过程,您可以选择其中之一。这使得共享资源变得非常容易,并且您可以发布更新,并一目了然地看到哪些项目正在运行类库的哪些版本

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

  • 可以在类库中包含视图,但不能作为cshtml。它们必须被编译到类库中。你需要完成这个

  • 在共享库中包含与用户相关的模型是100%可以的。然而,控制器更为复杂。除非您设置了一个单独负责处理所有身份验证的SSO服务器(至少可以说这是一项非常重要的任务),否则每个应用程序都需要自己的控制器来执行身份验证任务。如果所有站点都位于同一个域或其子域上,则可以轻松地在它们之间共享身份验证cookie。但是,如果他们将驻留在完全不同的域中,您仍然可以共享相同的“用户”,因为每个站点使用相同的数据库,但每个站点都需要单独的登录过程(在一个站点登录不会让您在另一个站点登录,即使相同的凭据对两个站点都有效)。唯一的解决办法是,再次强调,SSO


  • 如果这个问题不好,因为太基于观点,有人能告诉我一些现有的观点(或初学者指南)吗?因为我之前在谷歌上搜索过这篇文章,试图找到一个出发点,或者任何关于选择和方法的解释。谢谢你,看看那些现在完美的。。。非常感谢。足够让我们继续下去了!