ServiceStack のサービスは、基本的には通常の自動接続クラスです (現在の RequestContext が挿入されています)。任意の Service 内から、 を使用して別のすべてのサービスを実行できますbase.ResolveService<TService>
。たとえば、次のようになります。
public object Any(AnotherRequest request)
{
using (var service = base.ResolveService<GetSkillsService>())
{
List<SkillDto> results = service.Get(new GetSkillsList { ... });
}
}
注: これは単なる標準の C# メソッド呼び出しです。つまり、IOC からサービスを解決して実行するだけなので、HTTP や DTO のデシリアライゼーションなどを行わないため、パフォーマンスが低下することはありません。
ServiceStack の外部 (MVC など) から、 AppHostBase.ResolveServiceを使用して Service を呼び出すことができます。
using (var service = AppHostBase.ResolveService<GetSkillsService>(HttpContext.Current))
{
List<SkillDto> results = service.Get(new GetSkillsList { ... });
}
パス情報だけでサービスを実行する
1)IRestPath
を取得:
var controller = EndpointHost.Config.ServiceController;
var restPath = controller.GetRestPathForRequest("GET","/skillslist/5");
2) 以下を使用して新しいインスタンスを作成します。
var queryString = new Dictionary<string,string>();
var request = restPath.CreateRequest("/skillslist/5", queryString, null);
3) 次に、次のように実行します。
var response = controller.Execute(request, base.RequestContext);