我都不会。
理想情况下,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 。