9

को सक्रिय करने का प्रयास करते समय 'Microsoft.AspNetCore.Identity.UserManager` टाइप करने के लिए सेवा को हल करने में असमर्थ। मुझे यह त्रुटि लॉग इन कंट्रोलर में मिल रही है।'AuthController'

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Automobile.Models.Account]' while attempting to activate 'Automobile.Server.Controllers.AuthController'.

यहाँ प्रमाणीकरण नियंत्रक निर्माता है:

private SignInManager<Automobile.Models.Account> _signManager; 
    private UserManager<Automobile.Models.Account> _userManager; 

    public AuthController(UserManager<Models.Account> userManager, 
          SignInManager<Automobile.Models.Account> signManager) 
    { 
     this._userManager = userManager; 
     this._signManager = signManager; 
    } 

और यहाँ है startup.cs में ConfigureServices:

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddApplicationInsightsTelemetry(Configuration); 
     services.Configure<AppConfig>(Configuration.GetSection("AppSettings")); 

     //var provider = HttpContext.ApplicationServices; 
     //var someService = provider.GetService(typeof(ISomeService)); 


     services.AddDbContext<Providers.Database.EFProvider.DataContext>(options => options 
      .UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), 
       b => b.MigrationsAssembly("Automobile.Server") 
      )); 


     services.AddIdentity<IdentityUser, IdentityRole>(options => 
     { 
      options.User.RequireUniqueEmail = false; 
     }) 
     .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>() 
     .AddDefaultTokenProviders(); 
     //services.AddScoped<SignInManager<Automobile.Models.Account>, SignInManager<Automobile.Models.Account>>(); 
     //services.AddScoped<UserManager<Automobile.Models.Account>, UserManager<Automobile.Models.Account>>(); 

     services.AddMvc(); 
     App.Service = services.BuildServiceProvider(); 

     // Adds a default in-memory implementation of IDistributedCache. 
     services.AddDistributedMemoryCache(); 

     services.AddSession(options => 
     { 
      // Set a short timeout for easy testing. 
      options.IdleTimeout = TimeSpan.FromSeconds(10); 
      options.CookieHttpOnly = true; 
     }); 

    } 
+11

ऐसा लगता है कि आप 'पहचान उपयोगकर्ता' को मूल उपयोगकर्ता वर्ग के रूप में पंजीकृत कर रहे हैं लेकिन फिर आप 'ऑटोमोबाइल.मोडल्स.काउंट' का उपयोग कर रहे हैं, जो निश्चित रूप से एएसपी.NET पहचान –

+0

@FedericoDipuma द्वारा पंजीकृत नहीं है बहुत :) हल हो गया। – OMID

+0

आपने इसे कैसे हल किया ..? – Lobato

उत्तर

4

आप SignInManager, UserManager में एक ही उपयोगकर्ता डेटा मॉडल का उपयोग करने की आवश्यकता है और services.AddIdentity। यदि आप अपनी खुद की कस्टम एप्लिकेशन रोल मॉडल कक्षा का उपयोग कर रहे हैं तो वही प्रिंसिपल सच है।

तो, बदल

services.AddIdentity<IdentityUser, IdentityRole>(options => 
    { 
     options.User.RequireUniqueEmail = false; 
    }) 
    .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>() 
    .AddDefaultTokenProviders(); 

services.AddIdentity<Automobile.Models.Account, IdentityRole>(options => 
    { 
     options.User.RequireUniqueEmail = false; 
    }) 
    .AddEntityFrameworkStores<Providers.Database.EFProvider.DataContext>() 
    .AddDefaultTokenProviders(); 
+0

मुझे एक ही समस्या है, मेरे पास है मेरे ग्राहक उपयोगकर्ता और AddIdentity विधि में परिभाषित भूमिका और मुझे अभी भी एक ही त्रुटि मिल रही है। कोई विचार क्यों? मैं अपना कोड एक अलग थ्रेड में पोस्ट कर सकता था। – devC

+0

कृपया अपना कोड पोस्ट करें। – HojjatK

+0

दरअसल, मैंने उस मुद्दे को हल किया, लेकिन अब डीबी कनेक्शन बनाने में समस्या का सामना करना पड़ा। मैं समस्या पोस्ट करूंगा। – devC

1

को बस जवाब के बारे में स्पष्ट होना:

आप startup.cs में वर्ग ApplicationUser का उपयोग करते हैं: services.AddIdentity<ApplicationUser, IdentityRole>()

तो आपको अपने नियंत्रक में उसी कक्षा का उपयोग करना होगा जब मैं यह njecting:

public AccountController(UserManager<ApplicationUser> userManager) 

आप इस तरह के रूप में कुछ अन्य वर्ग का उपयोग करते हैं: क्योंकि आप स्टार्टअप में ApplicationUser, नहीं IdentityUser इसलिए इस्तेमाल किया

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[IdentityUser]' 

:

public AccountController(UserManager<IdentityUser> userManager) 

तो आपको यह त्रुटि मिल जाएगा यह प्रकार इंजेक्शन सिस्टम के साथ पंजीकृत नहीं है।

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