I have a requirement to have one service handle a request, transform it to some other request, pass that request to the inner service, get the response, and transform it back to the outer service response. Some code may explain it better. This is what I have done:
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;
}
}
As the comment in the code above shows, before I passed down the RequestContext
it was failing with a NullReferenceException. Now that I have done that it does work, but I'm wondering if I'm heading into an upstream battle in regards to how ServiceStack works? Will it cause me more problems down the track?
If both services were under my control, I would simply move the registration code into a separate shared dependency. However RegistrationService
is built into ServiceStack, and doesn't seem to be callable in any other way apart from this. Unless I am missing something?