मैं वर्तमान में ASP.Net Core 2.1 में अपने स्वयं के UserManager के साथ अपना खाता नियंत्रक बनाने का प्रयास कर रहा हूं। UserManager को डेटाबेस में उपयोगकर्ता से संबंधित प्रक्रियाओं जैसे सत्यापन, पंजीकरण, पासवर्ड परिवर्तन, आदि का प्रबंधन करना चाहिए और मैं चाहता हूं कि इसे AccountController कंस्ट्रक्टर में एक पैरामीटर के रूप में पारित किया जाए। मैंने स्टोरेज को services.AddDbContext<CustomDB>(...) के साथ पहले ही कॉन्फ़िगर कर दिया है जिस समस्या का मैं पता नहीं लगा सकता, वह यह है कि मुझे UserManager को कैसे इंजेक्ट करना चाहिए (इसका जीवनकाल क्या होना चाहिए - सिंगलटन, क्षणिक, स्कोप)। मैं किसी भी परिस्थिति में पहचान का उपयोग नहीं करना चाहता (यही कारण है कि मैं एक नया बना रहा हूं)। दूसरे शब्दों में, मैं अपने UserManager को ठीक से इंजेक्ट करने के लिए services.AddIdentity() के विकल्प की तलाश में हूं।

AccountControler.cs:

public class AccountController : Controller
{
        private readonly IUserManager _userManager;

        public AccountController(IUserManager userManager)
        {
            _userManager = userManager;
        }

        ...
}

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IUserManager, UserManager>();
    //or
    services.AddTransient<IUserManager, UserManager>();
    //or
    services.AddScoped<IUserManager, UserManager>();
}
1
m0skVi4a 25 जुलाई 2018, 17:12
जब पहिया को फिर से बनाने का इरादा होता है, तो यह देखने में मदद करता है कि वर्तमान कैसे बनाया गया है। सौभाग्य से स्रोत कोड उपलब्ध है। github.com/aspnet/Identity/blob/… और वे सबसे अधिक सब कुछ स्कोप के रूप में जोड़ते प्रतीत होते हैं।
 – 
Nkosi
25 जुलाई 2018, 17:21

2 जवाब

जब पहिए को फिर से बनाने का इरादा होता है, तो यह देखने में मदद करता है कि मौजूदा कैसे बनाए जाते हैं।

सौभाग्य से स्रोत कोड उपलब्ध है, और ऐसा लगता है अधिक से अधिक सब कुछ दायरे वाले के रूप में जोड़ने के लिए।

//...

services.TryAddScoped<UserManager<TUser>>();

//...

तो आपके मामले में आप एक समान पैटर्न का अनुसरण कर सकते हैं

public void ConfigureServices(IServiceCollection services) {

    services.AddScoped<IUserManager, UserManager>(); // Add my custom manager

    //...
}
1
Nkosi 26 जुलाई 2018, 15:42

अगर मैं समझता हूं कि आप क्या प्रयास कर रहे हैं, तो इस लिंक को देखें।

उदाहरण:

public async Task<ActionResult> Register(RegisterViewModel model)
{
  if (ModelState.IsValid) {
    var user = new ApplicationUser() { UserName = model.UserName,
      MagicCode = model.MagicCode };
    var result = await UserManager.CreateAsync(user, model.Password);
    if (result.Succeeded) {
      await SignInAsync(user, isPersistent: false);
      return RedirectToAction("Index", "Home");
    }
}
0
Switch 25 जुलाई 2018, 17:38
क्रमबद्ध करें, लेकिन मैं वहां और अधिक सामान करना चाहता हूं, जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मैं पहचान या इससे संबंधित किसी भी चीज़ का उपयोग नहीं करना चाहता हूं।
 – 
m0skVi4a
25 जुलाई 2018, 17:53