В настоящее время я разрабатываю API С# ServiceStack.
В одной из служб мне нужно выполнить другую услугу. Я разрешаю службу из контейнера Funq и выполняю соответствующий метод, но возвращаю json вместо объектов.net.
Я понимаю, что это потому, что исходный запрос от внешнего интерфейса был для типа содержимого json, а тип содержимого по умолчанию - json.
Есть ли способ разрешить службу и выполнить ее методы, но вместо этого получить объекты.net?
Вы можете выполнить и делегировать другую службу в ServiceStack с помощью ResolveService<T>
, например:
Изнутри службы 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;
}