在 MVC 区域的情况下如何将控制器分离到外部项目

How to separate controller to outside project in Case of MVC Area

我有一个要求,我需要在 MVC 项目之外分离控制器。我的情况就像我在 MVC 项目中有 3 个区域,我通过将所有视图保留在区域内,将每个区域内的所有控制器取出到单独的项目中。我不知道如何实现这一目标。如果有人遇到或实施了此问题,请分享您的想法和代码。

谢谢。

您可以在同一解决方案中创建两个项目。

  • 第一个项目是您的 MVC4 项目,其中包含视图、脚本、css 和区域。 (MyProject.PresentationLayer)
  • 第二个项目是解决方案中的 class 库,其中可以包含您的代码,例如控制器和模型。 (MyProject.LogicLayer)

使用 Visual Studio、MyProject.PresentationLayer 需要将引用添加到 MyProject.LogicLayer。这可以通过右键单击解决方案资源管理器中的引用并单击 MyProject.LogicLayer.

旁边的 Solution/Projects 上的复选框来完成

您现在应该可以在MyProject.LogicLayer中编写代码并正常引用MyProject.PresentationLayer中的代码.

谢谢大家,经过一番搜索,我找到了答案,而且也很简单。 如果您的应用程序中有更多区域并且您只想将控制器取出到不同的项目。正如 Jerode 所说,Dll 引用可以,但是当区域存在时,相同的控制器名称可以出现在不同的区域,因此我们需要进行一些调整,在区域注册部分我们需要指定项目的命名空间

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "AreaName_default",
            "Areaname/{controller}/{action}/{id}",
            new { controller = "controller", action = "Create", id = UrlParameter.Optional },
             new[] { "NameSpaceOfControllerAreaWhichSeparated"}
        );

    }

像在每个区域中你需要添加相应的分离项目的命名空间