亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

服務注冊選項

服務注冊選項

C#
忽然笑 2022-12-24 14:59:14
我有這個類,它從 Header 獲取 Authorization Header 值并將其存儲到變量中,如下所示:public class AuthenticationHeader{   private static  IHttpContextAccessor _httpContextAccessor;   public AuthenticationHeader(IHttpContextAccessor httpContextAccessor)   {      _httpContextAccessor = httpContextAccessor;   }   public string AuthHeader => _httpContextAccessor.HttpContext?.Request.Headers["Authorization"]}我已經像這樣在我的 DI 中注冊了這個課程Startup.csservices.AddScoped<AuthenticationHeader>();然后使用構造函數注入在我的 NetworkClient 中使用此類。public ClubMatasClient(HttpClient client, ILogger<ClubMatasClient> logger, AuthenticationHeader authHeader){   _client = client;   client.BaseAddress = new Uri("url");   client.DefaultRequestHeaders.Add("Accept", "application/json");   _logger = logger;   AuthToken = authHeader.AuthHeader;}我已經閱讀了此處文檔的生命周期,Scoped但我很困惑應該使用哪一個。我不想混合我的請求標頭中的身份驗證標頭。Transient
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

Scoped 是每個 http 請求,Transient 是每個類型。

由于您的授權標頭是針對每個請求的,因此您可以將AuthenticationHeader類注冊為 Scoped,這意味著為滿足您的請求而創建的所有類型都將獲得相同的實例。

但是您也可以將其注冊為 Transient,然后為您請求服務而創建的所有類型都將獲得內部使用 IHttpContextAccessor 的實例,AuthenticationHeader這將為您的 http 請求提供相同的 HttpContext。

所以你可以兩者都用,唯一要考慮的是內存消耗。作用域將使用更少的內存。

編輯: 實際上你也可以使用 Singleton 因為IHttpContextAccessor 注冊為 Singleton 并且在內部它使用 AsyncLocal 來存儲當前上下文。但我不推薦它,因為將來AuthenticationHeader可以使用一些會破壞行為的額外邏輯來擴展。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 87 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號