[ASP.NET MVC]將系統依不同模組建立個別的MVC專案(II)

[ASP.NET MVC]將系統依不同模組建立個別的MVC專案(II)

最近跟保哥討論如何將ASP.NET MVC依不同的模組切分,他有提到有個專案叫「Tailspin Travel」,可以將Area Build成不同的DLL,在CodePlex上已找不到了!

後來在找到了「ASP.NET MVC 4 pluggable application modules」,也是將Area Build成不同的DLL(應該是建立另一個MVC專案,假裝他是主專案的Area一份子)。

以下記錄一下作法,詳細過程,請參考ASP.NET MVC 4 pluggable application modules

一開始作者假設要建立一個系統,包含Marketing, Sales, Billing, Inventory, Warehouse。

所以先建立主框架應用程式,選取MVC 4 Basic專案,專案名稱「ProductDemo」。

然後在共用的_Layout.cshtml中加入各模組的Link, 模組名稱跟Area相同,如下,


<div id="nav">
	@Html.ActionLink("Home","Index","Home", new {Area=""}, null) |
	@Html.ActionLink("Marketing","Index","Marketing", new {Area="Marketing"}, null) |
	@Html.ActionLink("Billing","Index","Billing", new {Area="Billing"}, null) |
	@Html.ActionLink("Inventory","Index","Inventory", new {Area="Inventory"}, null) |
	@Html.ActionLink("Warehouse","Index","Warehouse", new  {Area="Warehouse"}, null)
</div>

 

為了怕各Area中有相同的Controller,可在ProductDemo’s RouteConfig.cs之中,加入namespace的設定,如下,


routes.MapRoute(
	name: "Default",
	url: "{controller}/{action}/{id}",
	defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
	namespaces: new string[] { "ProductDemo.Controllers" }
);

 

再來建立各模組的Area,作者先建立Marketing Area,將MarketingAreaRegistration.cs備份起來,然後把Marketing Area刪除。

然後再建立一個模組的MVC 4 Basic專案,專案名稱為「Marketing」,存放位置為ProductDemo的Areas目錄之下。

再把 App_Data, App_Start, Content, Viewers\Shared等目錄及global.asax刪除掉!

再把之前備份的MarketingAreaRegistration.cs Copy到Marketing的根目錄之下,並改Namespace為主程式的Namespace這個Demo為ProductDemo。

然後在RegisterArea Method中也多加入namespace設定,如下,


public override void RegisterArea(AreaRegistrationContext context)
{
	context.MapRoute(
		"Marketing_default",
		"Marketing/{controller}/{action}/{id}",
		new { controller = "Marketing", action = "Index", id = UrlParameter.Optional },
		new string[] { "Marketing.Controllers" }
	);
}

 

然後設定模組專案的Output路徑為 ..\..\bin\ ,就會把DLL Build到主程式的Bin目錄之中。

然後在模組專案中,建立Controller及View建置後,就可以透過主程式執行,然後執行到各模組專案了。

image

 

參考資料

ASP.NET MVC 4 pluggable application modules

Building a Composite MVC3 Application with Pluggable Areas from External Projects and Assemblies

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^