0

Я получаю несколько ошибок компилятора о моих привязках с Ninject. Это код:Ninject ASP.NET Identity Тип '.....' не может использоваться как параметр типа 'TImplementation' в общем типе или методе

kernel.Bind<IUserStore<ApplicationUserStore>>().To<UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>>().InRequestScope(); 
kernel.Bind<IRoleStore<ApplicationRoleStore>>().To<RoleStore<ApplicationRole, int, ApplicationUserRole>>().InRequestScope(); 

И эти ошибки компилятора:

Ошибка 5 Тип «MyNamespace.Data.ApplicatonRoleStore» не может быть использовано в качестве параметра типа «TRole» в родовом типе или метод «Microsoft.AspNet.Identity.IRoleStore». Нет никакого неявного преобразования ссылок из «MyNamespace.Data.ApplicatonRoleStore» в «Microsoft.AspNet.Identity.IRole».

Ошибка 6 Тип «MyNamespace.Data.ApplicatonRoleStore» не может использоваться как параметр типа «TROL» в универсальном типе или методе «Microsoft.AspNet.Identity.IRoleStore». Нет никакого неявного преобразования ссылок из «MyNamespace.Data.ApplicatonRoleStore» в «Microsoft.AspNet.Identity.IRole».

Ошибка 2 Тип «MyNamespace.Data.ApplicatonUserStore» не может использоваться как параметр типа «TUser» в универсальном типе или методе «Microsoft.AspNet.Identity.IUserStore». Нет никакого неявного преобразования ссылок из «MyNamespace.Data.ApplicatonUserStore» в «Microsoft.AspNet.Identity.IUser».

Ошибка 3 Тип «MyNamespace.Data.ApplicatonUserStore» не может использоваться как параметр типа «TUser» в родовом типе или методе «Microsoft.AspNet.Identity.IUserStore». Нет никакого неявного преобразования ссылок из «MyNamespace.Data.ApplicatonUserStore» в «Microsoft.AspNet.Identity.IUser».

Ошибка 4 Тип «Microsoft.AspNet.Identity.EntityFramework.RoleStore» не может использоваться как параметр типа «TImplementation» в универсальном типе или методе «Ninject.Syntax.IBindingToSyntax.To()». Нет никакого неявного преобразования ссылок из «Microsoft.AspNet.Identity.EntityFramework.RoleStore» в «Microsoft.AspNet.Identity.IRoleStore».

Ошибка 1 Тип «Microsoft.AspNet.Identity.EntityFramework.UserStore» не может использоваться как параметр типа «TImplementation» в универсальном типе или методе «Ninject.Syntax.IBindingToSyntax.To()». Нет никакого неявного преобразования ссылок из «Microsoft.AspNet.Identity.EntityFramework.UserStore» в «Microsoft.AspNet.Identity.IUserStore».

По умолчанию система asp.net-identity использует указатель для первичного ключа. Я изменил это, чтобы вместо этого использовать ints. Я вижу некоторые ошибки около Microsoft.AspNet.Identity.IRole<string>.

EDIT: Эти классы:

public class ApplicationRoleStore : RoleStore<ApplicationRole, int, ApplicationUserRole> 
{ 
    public ApplicationRoleStore(ApplicationDbContext context) 
     : base(context) 
    { } 
} 

public class ApplicationUserStore : 
    UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim> 
{ 
    public ApplicationUserStore(ApplicationDbContext context) 
     : base(context) 
    { } 
} 
+0

Все, кажется, указывает на недостающую реализации интерфейса, как ошибки компилятора сказать, как он пытается преобразовать из вашего конкретного класса к этому интерфейсу , – Alejandro

+0

Похоже, вы выполняете недействительную регистрацию.Можете ли вы показать нам интерфейс и определение класса для целевого объекта? –

+0

Я добавил классы, о которых жалуется компилятор. @alejandro, я не уверен, какой интерфейс мне не хватает, но это все, что есть у пользователя и пользователя. – Quoter

ответ

1

Я понял это. В случае, если кто-то натыкается на это, это, как:

kernel.Bind<IAuthenticationManager>().ToMethod(c => HttpContext.Current.GetOwinContext().Authentication); //.InRequestScope(); 

kernel.Bind<IRoleStore<ApplicationRole, int>>().To<RoleStore<ApplicationRole, int, ApplicationUserRole>>() 
      .WithConstructorArgument("context", context => kernel.Get<ApplicationDbContext>()); 

kernel.Bind<IUserStore<ApplicationUser, int>>() 
      .To<UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>>() 
      .WithConstructorArgument("context", context => kernel.Get<ApplicationDbContext>()); 

Не уверен, что если IAuthenticationManager должен быть InRequestScope, но сейчас я оставил эту часть.

И для руководителей вы бы ему так:

kernel.Bind<UserManager<ApplicationUser, int>>().ToSelf().InRequestScope(); 
kernel.Bind<RoleManager<ApplicationRole, int>>().ToSelf().InRequestScope(); 

 Смежные вопросы

  • Нет связанных вопросов^_^