這是如何工作的?我已閱讀文檔,但希望獲得更多信息。服務堆棧IRequiresHttpRequest模式
從閱讀文檔我明白,當我的DTO實現IRequiresHttpRequest,那麼DTO的屬性將不會自動填充,但在我的DTO中,我現在可以訪問HttpRequest對象,所以我可以將我的DTO更改爲'get'從請求對象中抽取事物的屬性。
什麼是注入HttpRequest到我的DTO?文檔建議服務棧在後臺執行此操作,但是我只能在註冊自定義請求綁定並手動注入HttpRequest對象時才能使其工作。
RequestBinders.Add(typeof(MyDto), httpReq => {
var dto = new MyDto();
dto.HttpRequest = httpReq;
return dto;
});
問題1:IRequiresHttpRequest的注入究竟意味着什麼工作?
問題2:有沒有辦法獲得對HttpRequest對象的訪問權限,以便我的DTO可以支持自定義的'get'屬性,仍然有服務棧運行它自動映射?例如:
public class MyDto
: IRequiresHttpRequest
{
public Int32 AutoMappedProperty1 { get; set; }
public Int32 AutoMappedProperty2 { get; set; }
public Int32 AutoMappedProperty3 { get; set; }
public Int32 AutoMappedProperty4 { get; set; }
public Int32 CustomMappedProperty { get { return customMappedProperty; } }
IHttpRequest httpRequest;
public IHttpRequest HttpRequest
{
get
{
return httpRequest;
}
set
{
httpRequest = value;
// lets say this searches the query string for a variety of
// different keys, and then maps one of them of
// CustomMappedProperty based upon a specific set of rules
customMappedProperty = [...]
}
}
}
在上述情況下,我定義CustomMappedProperty如何被填充,但我還是想服務棧先走,並映射所有「set'-能性能。有沒有辦法做到這一點?我可以手動調用服務堆棧dto映射器嗎?
https://github.com/ServiceStack/ServiceStack/wiki/Access-HTTP-specific-features-in-services – sungiant 2013-04-09 14:01:38
該頁面只提到IRequiresRequestContext,我必須假設IRequiresHttpRequest將以相同的方式注入。 – sungiant 2013-04-09 14:02:46
沒問題,但是會談到在您的服務中注入請求上下文,而不是請求DTO和跳過反序列化。我的回答解釋了差異。 – mythz 2013-04-09 14:09:40