Asp.net MVC樣本項目“Suteki.Shop”分析之Controller

來源:互聯網
上載者:User

在上文中,介紹了如何安裝和使用Suteki,今天我們通過源碼來看一下Suteki是如何使用Controller 。

在Suteki中,其使用Abstract的方式來定義一個ControllerBase,以此作為所有Controller的 基類,下面是其Controller的類設計圖:

在該基類中定義了一些Controller中常用到的方法,比如為當前視圖添加MetaDescription,Title等 :

[Rescue("Default"), Authenticate, CopyMessageFromTempDataToViewData]
public abstract class ControllerBase : Controller, IProvidesBaseService
{
private IBaseControllerService baseControllerService;

/// <summary>
/// Supplies services and configuration to all controllers
/// </summary>
public IBaseControllerService BaseControllerService
{
get { return baseControllerService; }
set
{
baseControllerService = value;

ViewData["Title"] = "{0}{1} ".With(
baseControllerService.ShopName,
GetControllerName());

ViewData["MetaDescription"] = "\"{0}\"".With (baseControllerService.MetaDescription);
}
}

public ILogger Logger { get; set; }

public virtual string GetControllerName()
{
return " - {0}".With(GetType().Name.Replace("Controller", ""));
}


public virtual void AppendTitle(string text)
{
ViewData ["Title"] = "{0} - {1}".With(ViewData["Title"], text);
}

public virtual void AppendMetaDescription(string text)
{
ViewData ["MetaDescription"] = text;
}

public string Message
{
get { return TempData["message"] as string; }
set { TempData ["message"] = value; }
}

protected override void OnException (ExceptionContext filterContext) {
Response.Clear();
base.OnException (filterContext);
}
}

當然,細心的朋友發現了該抽象類別中還包括一個 IBaseControllerService介面執行個體。

該介面的主要定義了一些網店系統資訊,如店鋪名稱,著作權 資訊,Email資訊等,如下:

public interface IBaseControllerService
{
IRepository<Category> CategoryRepository { get; }
string GoogleTrackingCode { get; set; }
string ShopName { get; set; }
string EmailAddress { get; set; }
string SiteUrl { get; }
string MetaDescription { get; set; }
string Copyright { get; set; }
string PhoneNumber { get; set; }
string SiteCss { get; set; }
}

而作為唯一一個實現了該介面的子類“BaseControllerService”定義如下:

public class BaseControllerService : IBaseControllerService
{
public IRepository<Category> CategoryRepository { get; private set; }
public string GoogleTrackingCode { get; set; }
public string MetaDescription { get; set; }
private string shopName;
private string emailAddress;
private string copyright;
private string phoneNumber;
private string siteCss;

..
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.