Cra*_*g A 23 asp.net-mvc service-layer servicestack asp.net-web-api
我正在创建一个MVC网站,并打算创建一个Web API,以便在网站内使用,也可能由第三方使用.
从MVC控制器,我将调用一个服务层,它将包含业务逻辑,作用于域模型,执行验证,进行基础设施外部服务调用等.服务层反过来将调用存储库以进行任何数据库交互.
现在,我喜欢ServiceStack的外观,并打算将它用于Web API - 它似乎比ASP.NET MVC 4 Web API更成熟.我的问题是,我应该在上面的服务层中调用ServiceStack API,类似于MVC控制器,还是应该将其作为服务层,为Web客户端和MVC控制器提供服务?
myt*_*thz 37
我也不会.
理想情况下,MVC和ServiceStack都应该使用和共享纯C#依赖项.MVC + ServiceStack网站和谐共处的一个很好的例子是SocialBootstrapApi演示项目,该项目已部署在AppHarbor上:http://bootstrapapi.apphb.com
我会在您的ServiceStack AppHost中注册所有依赖项,然后注册一个MVC Controller工厂,这样您的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));
}
Run Code Online (Sandbox Code Playgroud)
使用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) };
}
}
Run Code Online (Sandbox Code Playgroud)
使用相同IGreeter的MVC控制器示例:
public HelloController : ServiceStackController {
public IGreeter Greeter { get; set; } //Autowired
public void Index(string name) {
ViewBag.GreetResult = Greeter.SayHelloTo(name);
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
一般的想法是MVC控制器内部的逻辑和ServiceStack服务应该关注HTTP层/集成点,即从QueryString或FORM POST的变量收集用户输入并用它调用纯/可测试的C#逻辑然后准备响应,在ServiceStack中填充Response DTO,而对于MVC Controller,您将填充ViewModel.
虽然我可以通过上面的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然MVC Controller示例继承自ServiceStackController,但它不是必需的,但允许您在MVC和ServiceStack中共享相同的Session/Caching/Authentication + RequiredRole/RequiredPermission属性.
请参阅MVC PowerPack,了解ServiceStack为MVC带来的其他好处.
| 归档时间: |
|
| 查看次数: |
9005 次 |
| 最近记录: |