gpt4 book ai didi

.net - 将 ServiceStack 请求转发给其他服务处理程序

转载 作者:行者123 更新时间:2023-12-03 00:21:07 26 4
gpt4 key购买 nike

我需要让一个服务处理请求,将其转换为其他请求,将该请求传递给内部服务,获取响应,然后将其转换回外部服务响应。一些代码可能会更好地解释它。这就是我所做的:

public class InviteUserService : Service, IPost<Invitee>
{
public RegistrationService RegistrationService { get; set; }

public object Post(Invitee invitee)
{
// Do other invitation related work that is part of my domain.

var registration = invitee.TranslateTo<Registration>();
registration.UserName = invitee.EmailAddress;
registration.Email = invitee.EmailAddress;

// It previously threw a null ref exception until I added this.
RegistrationService.RequestContext = RequestContext;

var response = RegistrationService.Post(registration);
if (response is RegistrationResponse)
{
var inviteeResponse = response.TranslateTo<InviteeResponse>();
return inviteeResponse;
}
// Else it is probably an error and just return it directly to be handled by SS.
return response;
}
}

正如上面代码中的注释所示,在我传递 RequestContext 之前,它失败并出现 NullReferenceException。现在我已经做到了,它确实可以工作,但我想知道我是否正在就 ServiceStack 的工作原理展开一场上游战斗?它会给我带来更多问题吗?

如果这两个服务都在我的控制之下,我只需将注册代码移至单独的共享依赖项中即可。然而,RegistrationService 内置于 ServiceStack 中,除此之外似乎无法以任何其他方式调用。除非我错过了什么?

最佳答案

ServiceStack中将请求委托(delegate)给其他服务的方式就是调用base.ResolveService<T>这只是 resolves the Service from the IOC and injects the current RequestContext为你。这本质上与您正在做的事情类似,但由于这是执行此操作的官方 API,因此如果需要执行其他操作,它将得到维护。

使用此 API,您的服务将如下所示:

public class InviteUserService : Service, IPost<Invitee>
{
public object Post(Invitee invitee)
{
// Do other invitation related work that is part of my domain.

var registration = invitee.TranslateTo<Registration>();
registration.UserName = invitee.EmailAddress;
registration.Email = invitee.EmailAddress;

// Resolve auto-wired RegistrationService from IOC
using (var regService = base.ResolveService<RegistrationService>())
{
var response = regService.Post(registration);
if (response is RegistrationResponse)
{
var inviteeResponse = response.TranslateTo<InviteeResponse>();
return inviteeResponse;
}
return response;
}
}
}

关于.net - 将 ServiceStack 请求转发给其他服务处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13702510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com