使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署

首先说明一下测试环境。如下图所示,解决方案中有三个项目。

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第1张图片
解决方案

其中,MainWeb项目时一个空的MVC项目,没有模型、控制器和视图。

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第2张图片
MainWeb

解决方案中的其他两个项目是类库项目,与一般的类库不同的是,FirstArea和SecondArea需要依赖System.Web和ASP.NET MVC,前者在.NET框架程序集中引用,后者可以通过NuGet安装。

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第3张图片
类库

FirstArea和SecondArea项目中各自有一个控制器,都没有过多的代码。这两个项目代表两个不同的程序员开发的不同的后端服务。

using System.Web.Mvc;
namespace FirstArea.Controllers
{
    public class DefaultController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Text = "First";
            return View();
        }
    }
}
using System.Web.Mvc;
namespace SecondArea.Controllers
{
    public class DefaultController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Text = "Second";
            return View();
        }
    }
}

FirstArea和SecondArea项目除了控制器以外,还各自都有一个用来注册区域的类。

using System.Web;
using System.Web.Mvc;
namespace FirstArea
{
    public class FirstAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "FirstArea";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "FirstArea_default",
                "FirstArea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
using System.Web;
using System.Web.Mvc;
namespace SecondArea
{
    public class SecondAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "SecondArea";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "SecondArea_default",
                "SecondArea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

最后,将FirstArea和SecondArea项目的生成路径全都改成生成到MainWeb的bin目录中。值得注意的是,MainWeb不需要引用FirstArea和SecondArea,只要这样生成到MainWeb的bin目录中,然后将MainWeb部署到IIS上,即可实现集中部署的效果。

当然,事情还没完,我们还需要验证这样的集中部署是否有效,下面我们在MainWeb中开发前端页面。

首先,在MainWeb项目中添加FirstArea和SecondArea区域,注意,如果添加的区域有注册区域的类,是需要删掉的,因为这两个区域的注册类已经在另外两个项目中定义了。

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第4张图片
Areas

建好区域之后,按照ASP.NET MVC的约定,在Views文件夹中新建与控制器一样名称的文件夹,再新建与Action名称一样的cshtml文件。

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第5张图片
View

View的内容很简单,就是输出在action中赋值的ViewBag。

@{
    ViewBag.Title = "Index";
}

我是 @ViewBag.Text 的View

最终的代码结构是下图这样的:

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第6张图片
最终结构

然后运行,运行结果如下:

使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第7张图片
FirstArea
使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署_第8张图片
SecondArea

总结一下,通过注册区域的方式,两个程序员就能独立的开发后端的服务,然后把编译好的dll丢到网站的bin目录中,只要在网站中按约定建立好视图,这样后端即实现了服务独立,又能满足集中部署的需求。

你可能感兴趣的:(使用ASP.NET MVC的区域(Areas)实现分部开发和集中部署)