Asp.net-Mvc

ServiceStack 應該是 MVC 應用程序中的服務層還是應該呼叫服務層?

  • May 13, 2012

我正在創建一個 MVC 網站,還打算創建一個 Web API,供網站內部使用,也可能供第三方使用。

我將從 MVC 控制器呼叫服務層,該服務層將包含業務邏輯、對域模型進行操作、執行驗證、進行基礎設施外部服務呼叫等。服務層反過來將呼叫儲存庫以進行任何數據庫互動。

現在,我喜歡ServiceStack的外觀並打算將它用於 Web API - 它似乎比ASP.NET MVC 4 Web API更成熟。我的問題是,我應該將 ServiceStack API 呼叫到上面的服務層,類似於 MVC 控制器,還是應該將其作為服務層,同時為 Web 客戶端和 MVC 控制器提供服務?

我都不會。

理想情況下,MVC 和 ServiceStack 都應該使用和共享純 C# 依賴項。一個 MVC + ServiceStack 網站和諧共處的好例子是SocialBootstrapApi展示項目,該項目已部署在 AppHarbor 上:http ://bootstrapapi.apphb.com

我將在您的 ServiceStack AppHost 中註冊您的所有依賴項,然後註冊一個MVC 控制器工廠,以便您的 MVC 控制器和 ServiceStack 服務都與這些依賴項自動連接。

在您的 AppHost 中:

void Configure(Funq.Container container) {
   container.Register<IGreeter>(c => new Greeter());
   //Set MVC to use the same Funq IOC as ServiceStack
   ControllerBuilder.Current.SetControllerFactory(
      new FunqControllerFactory(container));
}

使用 ServiceStack 服務的範例IGreeter

public class HelloService : Service {
   public IGreeter Greeter { get; set; } //Autowired

   public HelloResponse Get(Hello request) {
       return new HelloResponse { 
          Result = Greeter.SayHelloTo(request.Name) };
   }
}

使用相同 IGreeter 的 MVC 控制器範例:

public HelloController : ServiceStackController {
   public IGreeter Greeter { get; set; } //Autowired

   public void Index(string name) {
      ViewBag.GreetResult = Greeter.SayHelloTo(name);
      return View();
   }        
}

總體構想是 MVC 控制器內部的邏輯,ServiceStack 服務應該關注 HTTP 層/集成點,即從 QueryString 或 FORM POST 變數中收集使用者輸入,並用它呼叫純/可測試的 C# 邏輯,然後準備響應,在 ServiceStack 中將填充響應 DTO,而對於 MVC 控制器,您將填充 ViewModel。

從 MVC 控制器呼叫 ServiceStack 服務

雖然我會通過上面的 C# greet 服務獲得 Controllers + ServiceStack 共享功能,但您也可以從 MVC 控制器呼叫 ServiceStack 服務,例如:

public HelloController : ServiceStackController {

 public void Index(string name) 
 {
   using (var helloService = AppHostBase.ResolveService<HelloService>())
   {
      ViewBag.GreetResult = helloService.Get(name).Result;
      return View();
   }
 }        
}

與 ServiceStackController 共享會話/記憶體

儘管 MVC 控制器範例繼承自ServiceStackController,但這不是必需的,但允許您在 MVC 和 ServiceStack 中共享相同的 Session / Caching / Authentication + RequiredRole/RequiredPermission 屬性。

有關ServiceStack 為 MVC 帶來的其他好處,請參閱MVC PowerPack 。

引用自:https://stackoverflow.com/questions/10571450