5

मैं एक वर्ग ClaimsIdentity निर्भरता इतनी तरह के रूप में है कि है:ASP.NET कोर निर्भरता इंजेक्शन अंदर से ClaimsPrincipal या ClaimsIdentity हो रही

सार्वजनिक ClaimsIdentityDecorator (ClaimsIdentity पहचान)

माना जाता है यही कारण है कि वर्तमान उपयोगकर्ता की दावेदारी होने के लिए। मैं इसे IHttpContextAccessor इसलिए की तरह के माध्यम से की तरह पुनः प्राप्त:

services.AddScoped(x=> 
{ 
    var context = x.GetService<IHttpContextAccessor>(); 
    return context.HttpContext.User.Identity as ClaimsIdentity; 
}); 

मैं निरीक्षण करने के लिए एक उपयोगकर्ता का दावा है की जरूरत है, और यह कि ClaimsIdentity या ClaimsPrincipal या कुछ अन्य पहचान वस्तु स्वचालित रूप से मेरे लिए इंजेक्ट किया जाएगा प्रतीत होता है। इसे HttpContext से पुनर्प्राप्त करना और इसे स्वयं जोड़ना ठीक है। हालांकि, अगर कोई अन्य ऑब्जेक्ट या इंटरफ़ेस है जिसका दावा है कि पहले से ही वहां है, तो मैं अपनी कक्षाओं को उस निर्भरता को लेने के लिए डिज़ाइन करना चाहता हूं।

इसके अलावा, मैं बस यह सुनिश्चित करना चाहता हूं कि इसे स्कोप स्तर पर इंजेक्शन दिया जाना चाहिए।

+0

आश्रित वर्गों में केवल 'IHttpContextAccessor' इंजेक्ट क्यों न करें और आवश्यकतानुसार संदर्भ से उपयोगकर्ता को निकालें। – Nkosi

+0

@ निकोसी क्योंकि मैं सिर्फ वर्तमान उपयोगकर्ता और उसके दावों को चाहता हूं। पूरे http संदर्भ नहीं। –

उत्तर

3

ClaimsIdentity प्रदान करने के लिए कोई रास्ता नहीं बनाया गया है, जिसे मैं जानता हूं, लेकिन शायद आप AddTransient चाहते हैं। यदि कोई उपयोगकर्ता लॉग आउट करता है, लेकिन अनुरोध AddScoped अनुरोध की शुरुआत में बनाया गया था, तो उस परिवर्तन को प्रतिबिंबित नहीं करेगा।

संबंधित मुद्दे