2015-10-26 4 views
4

У меня есть IdentityManager ThinkTecture, но теперь, когда вы переходите к '/ idm/url, я получаю сообщение об ошибке:Ошибка ASP.NET Identity Manager: ошибка при попытке создать контроллер типа MetaController (без конструктора без параметров)

An error occurred when trying to create a controller of type 'MetaController'. Make sure that the controller has a parameterless public constructor. 

ошибка была упомянута в комментарии в another StackOverflow issue, но решение этого вопроса не было дано. enter image description here

ответ

6

При формулировании этого вопроса я нашел решение в an issue of the IdentityManager GitHub repo. Я должен был изменить конструктор ApplicationUserManager в IdentityConfig.cs от:

public ApplicationUserManager(IUserStore<ApplicationUser> store): base(store) {} 

к:

public ApplicationUserManager(ApplicationUserStore store): base(store) {} 

И подобное изменение типа в Create функции чуть ниже, что, чтобы получить все компиляции.

ApplicationUserStore должно быть определено следующим образом.

public class ApplicationUserStore: UserStore<ApplicationUser> 
{ 
    public ApplicationUserStore(ApplicationDbContext ctx): base(ctx) {} 
} 

Я положил его в Startup.cs чуть выше декларации ApplicationRoleStore.

1

У меня была такая же проблема, но вместо того, чтобы модифицировать конструкторы, я установил его настройки регистрации DI

public static void ConfigureMyCustomIdentityManagerService(this IdentityManagerServiceFactory factory, string connectionString) 
    { 
     factory.Register(new Registration<UserManager<User, Guid>>(x => new MyCustomUserManager(new MsSqlUserStore<User>(connectionString)))); 
     factory.Register(new Registration<RoleManager<Role, Guid>>(x => new RoleManager<Role, Guid>(new MsSqlRoleStore<Role>(connectionString)))); 

     factory.IdentityManagerService = new Registration<IIdentityManagerService, AspNetIdentityManagerService<User, Guid, Role, Guid>>(); 
    }