2012-12-04 51 views
4

我有一個要求有一個服務處理請求,將其轉換爲一些其他的要求,傳遞請求內的服務,得到了響應,並將其轉換回外服務響應。有些代碼可能會更好地解釋它。這是我做了什麼:轉發ServiceStack請求到其他服務處理器

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,似乎並沒有要在離開這個任何其他方式調用。除非我錯過了什麼?

回答

5

將請求委託給ServiceStack中的其他服務的方式是致電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; 
     }  
    } 
} 
+0

感謝,正是我一直在尋找。而事實證明,這是什麼'RegistrationService'也確實爲自動登錄轉發到'AuthService',不知道我怎麼錯過了早期的... – Tyson

相關問題