asp.net-mvc – ServiceStack应该是MVC应用程序中的服务层还是应该调用服务层?

我正在创建一个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 Controller factory,这样您的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));
}

使用IGreeter的ServiceStack服务示例

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中,将填充Response DTO,而对于MVC Controller,您将填充viewmodel。

从MVC控制器调用ServiceStack服务

虽然我将通过上面的C#greet服务来控制器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

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....