I am trying to pass to my controller a RoleManager like UserManager, but I have this error:
An unhandled error occurred while processing the request.
InvalidOperationException: Unable to enable service for type 'Microsoft.AspNet.Identity.RoleManager`1 [Web.MongoDBIdentitySample.Models.ApplicationRole] when trying to activate' Web.MongoDBIdentitySample.Controllers.AccountController '.
This is my ConfigureServices method:
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Registers MongoDB conventions for ignoring default and blank fields // NOTE: if you have registered default conventions elsewhere, probably don't need to do this RegisterClassMap<ApplicationUser, IdentityRole, string>.Init(); // Add Mongo Identity services to the services container. services.AddIdentity<ApplicationUser, IdentityRole>() .AddMongoDBIdentityStores<ApplicationDbContext, ApplicationUser, IdentityRole, string>(options => { options.ConnectionString = Configuration["Data:DefaultConnection:ConnectionString"]; // No default, must be configured if using (eg "mongodb://localhost:27017") // options.Client = [IMongoClient]; // Defaults to: uses either Client attached to [Database] (if supplied), otherwise it creates a new client using [ConnectionString] // options.DatabaseName = [string]; // Defaults to: "AspNetIdentity" // options.Database = [IMongoDatabase]; // Defaults to: Creating Database using [DatabaseName] and [Client] // options.UserCollectionName = [string]; // Defaults to: "AspNetUsers" // options.RoleCollectionName = [string]; // Defaults to: "AspNetRoles" // options.UserCollection = [IMongoCollection<TUser>]; // Defaults to: Creating user collection in [Database] using [UserCollectionName] and [CollectionSettings] // options.RoleCollection = [IMongoCollection<TRole>]; // Defaults to: Creating user collection in [Database] using [RoleCollectionName] and [CollectionSettings] // options.CollectionSettings = [MongoCollectionSettings]; // Defaults to: { WriteConcern = WriteConcern.WMajority } => Used when creating default [UserCollection] and [RoleCollection] // options.EnsureCollectionIndexes = [bool]; // Defaults to: false => Used to ensure the User and Role collections have been created in MongoDB and indexes assigned. Only runs on first calls to user and role collections. // options.CreateCollectionOptions = [CreateCollectionOptions]; // Defaults to: { AutoIndexId = true } => Used when [EnsureCollectionIndexes] is true and User or Role collections need to be created. // options.CreateIndexOptions = [CreateIndexOptions]; // Defaults to: { Background = true, Sparse = true } => Used when [EnsureCollectionIndexes] is true and any indexes need to be created. }) .AddDefaultTokenProviders(); services.AddIdentity<ApplicationRole, IdentityRole>() .AddMongoDBIdentityStores<ApplicationDbContext, ApplicationUser, IdentityRole, string>(options => { options.ConnectionString = Configuration["Data:DefaultConnection:ConnectionString"]; // No default, must be configured if using (eg "mongodb://localhost:27017") // options.Client = [IMongoClient]; // Defaults to: uses either Client attached to [Database] (if supplied), otherwise it creates a new client using [ConnectionString] // options.DatabaseName = [string]; // Defaults to: "AspNetIdentity" // options.Database = [IMongoDatabase]; // Defaults to: Creating Database using [DatabaseName] and [Client] // options.UserCollectionName = [string]; // Defaults to: "AspNetUsers" // options.RoleCollectionName = [string]; // Defaults to: "AspNetRoles" // options.UserCollection = [IMongoCollection<TUser>]; // Defaults to: Creating user collection in [Database] using [UserCollectionName] and [CollectionSettings] // options.RoleCollection = [IMongoCollection<TRole>]; // Defaults to: Creating user collection in [Database] using [RoleCollectionName] and [CollectionSettings] // options.CollectionSettings = [MongoCollectionSettings]; // Defaults to: { WriteConcern = WriteConcern.WMajority } => Used when creating default [UserCollection] and [RoleCollection] // options.EnsureCollectionIndexes = [bool]; // Defaults to: false => Used to ensure the User and Role collections have been created in MongoDB and indexes assigned. Only runs on first calls to user and role collections. // options.CreateCollectionOptions = [CreateCollectionOptions]; // Defaults to: { AutoIndexId = true } => Used when [EnsureCollectionIndexes] is true and User or Role collections need to be created. // options.CreateIndexOptions = [CreateIndexOptions]; // Defaults to: { Background = true, Sparse = true } => Used when [EnsureCollectionIndexes] is true and any indexes need to be created. }) .AddDefaultTokenProviders(); // Add MVC services to the services container. services.AddMvc(); // Add application services. services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); }
This is my AccountController class:
public class AccountController : Controller { private readonly UserManager<ApplicationUser> _userManager; private readonly RoleManager<ApplicationRole> _roleManager; private readonly SignInManager<ApplicationUser> _signInManager; private readonly IEmailSender _emailSender; private readonly ISmsSender _smsSender; private readonly ILogger _logger; public AccountController( UserManager<ApplicationUser> userManager, RoleManager<ApplicationRole> roleManager, SignInManager<ApplicationUser> signInManager, IEmailSender emailSender, ISmsSender smsSender, ILoggerFactory loggerFactory) { _userManager = userManager; _roleManager = roleManager; _signInManager = signInManager; _emailSender = emailSender; _smsSender = smsSender; _logger = loggerFactory.CreateLogger<AccountController>(); } }
EDIT: added ApplicationRole class:
public class ApplicationUser : IdentityUser { } public class ApplicationDbContext : IdentityDatabaseContext<ApplicationUser, ApplicationRole, string> { } public class ApplicationRole : IdentityRole { }
Any ideas how to do this? Thanks!!