私はどちらもしません。
理想的には、MVC と ServiceStack の両方が純粋な C# 依存関係を使用および共有する必要があります。MVC + ServiceStack Web サイトが調和して共存している好例は、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 レイヤー/統合ポイントに関係している必要があります。 MVCコントローラーの場合はViewModelにデータを入力しますが、ServiceStackではResponse DTOにデータを入力します。
MVC コントローラーから ServiceStack サービスを呼び出す
上記の C# グリーティング サービスを介して Controllers + ServiceStack 共有機能を持たせますが、次のように MVC Controller から 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を参照してください。