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

前端之家收集整理的这篇文章主要介绍了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:

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

使用IGreeter的ServiceStack服务示例

  1. public class HelloService : Service {
  2. public IGreeter Greeter { get; set; } //Autowired
  3.  
  4. public HelloResponse Get(Hello request) {
  5. return new HelloResponse {
  6. Result = Greeter.SayHelloTo(request.Name) };
  7. }
  8. }

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

  1. public HelloController : ServiceStackController {
  2. public IGreeter Greeter { get; set; } //Autowired
  3.  
  4. public void Index(string name) {
  5. ViewBag.GreetResult = Greeter.SayHelloTo(name);
  6. return View();
  7. }
  8. }

一般的想法是MVC中的逻辑控制器,ServiceStack服务应该涉及HTTP层/集成点,即从QueryString或FORM POST的变量收集用户输入,并调用纯/可测C#逻辑,然后准备响应,在ServiceStack中,将填充Response DTO,而对于MVC Controller,您将填充viewmodel。

从MVC控制器调用ServiceStack服务

虽然我将通过上面的C#greet服务来控制器ServiceStack共享功能,但也可以从MVC控制器调用ServiceStack服务,如:

  1. public HelloController : ServiceStackController {
  2.  
  3. public void Index(string name)
  4. {
  5. using (var helloService = AppHostBase.ResolveService<HelloService>())
  6. {
  7. ViewBag.GreetResult = helloService.Get(name).Result;
  8. return View();
  9. }
  10. }
  11. }

与ServiceStackController共享会话/缓存

虽然MVC控制器示例继承自ServiceStackController,但并不一定要允许您在MVC和ServiceStack中共享相同的Session / Caching / Authentication requiredRole / requiredPermission属性

有关ServiceStack为MVC带来的其他好处,请参阅MVC PowerPack

猜你在找的asp.Net相关文章