我目前正在开发一个C#ServiceStack API。
在其中一项服务中,我需要执行另一项服务。我从Funq容器解析服务并执行相关方法,但返回json而不是.net对象。
我理解这是因为前端的原始请求是针对内容类型的json而默认内容类型是json。
有没有办法可以解析服务并执行其方法但是接收.net对象?
答案 0 :(得分:3)
您可以使用ResolveService<T>
执行并委托ServiceStack中的其他服务,例如:
从ServiceStack服务内部:
using (var service = base.ResolveService<MyService>())
{
var response = service.Get(new MyRequest { ... });
}
从自定义用户会话中:
using (var service = authService.ResolveService<MyService>())
{
var response = service.Get(new MyRequest { ... });
}
来自ServiceStack外部:
using (var service = HostContext.ResolveService<MyService>())
{
var response = service.Get(new MyRequest { ... });
}
由于ServiceStack中的服务就像任何其他IOC依赖项一样,ResolveService的实现只是从ServiceStack的IOC解析服务并注入当前的请求,即:
public static T ResolveService<T>(HttpContextBase httpCtx=null)
where T : class, IRequiresRequest
{
var service = AssertAppHost().Container.Resolve<T>();
if (service == null) return null;
service.Request = httpCtx != null
? httpCtx.ToRequest()
: HttpContext.Current.ToRequest();
return service;
}