ServiceStack 中的服务本质上只是普通的自动连接类(注入了当前的 RequestContext)。从任何服务内部,您可以使用所有其他服务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调用服务,例如:
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);