首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 範例專案「Suteki.Shop」分析:Controller 基類與共用服務

     編輯:關於ASP.NET

專案定義抽象 ControllerBase 作為所有 Controller 父類,注入 IBaseControllerService 提供共用設定:

[Rescue("Default"), Authenticate, CopyMessageFromTempDataToViewData]
public abstract class ControllerBase : Controller, IProvidesBaseService {
  private IBaseControllerService baseControllerService;
  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 介面與實作

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; }
}
public class BaseControllerService : IBaseControllerService {
  public IRepository<Category> CategoryRepository { get; private set; }
  public string GoogleTrackingCode { get; set; }
  public string MetaDescription { get; set; }
  private string shopName, emailAddress, copyright, phoneNumber, siteCss;
  // 屬性實作略...
}

透過基類統一管理頁面標題、Meta、訊息傳遞與例外處理,配合 IOC 注入服務實現設定集中化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved