Я не понимаю, как создать RoleManager от Ninject в моем приложении, MVC - PullRequest
0 голосов
/ 08 февраля 2019

Пожалуйста, спросите меня, как добавить привязку в Ninject.Web.Common?

У меня есть объект для роли

public class AppRole : IdentityRole
{
    public AppRole() : base() { }

    public AppRole(string name)
        : base(name)
    { }
}

и менеджер

public class AppRoleManager : RoleManager<AppRole>
{
    public AppRoleManager(RoleStore<AppRole> store) : base(store)
    { }
}

я хочу, чтобы метод создания работал в Ninject, как я это делал с UserManager и SignUpManager

мой общий Ninject

private static void RegisterServices(IKernel kernel)
    {
        System.Web.Mvc.DependencyResolver.SetResolver(new Infrastructure.NinjectDependencyResolver(kernel));

        kernel.Bind<IRoleStore<IdentityRole, string>>().To<RoleStore<IdentityRole, string, IdentityUserRole>>();
        kernel.Bind<RoleManager<IdentityRole, string>>().ToSelf();

    }

kernel.Bind<IRoleStore<IdentityRole, string>>().To<RoleStore<IdentityRole, string, IdentityUserRole>>();
    kernel.Bind<RoleManager<IdentityRole, string>>().ToSelf();

Я изменяю привязку, которая в случае ошибки неверна, на

kernel.Bind<AppRoleManager>().ToSelf();
        kernel.Bind<IRoleStore<IdentityRole, string>>().To<RoleStore<IdentityRole, string, IdentityUserRole>>();

и проблема в конструкторе выключена.(спасибо Александр)

но проблема в поле зрения

enter image description here

мой контроллер Не было ошибок при компиляции приложения,Однако в обратном представлении I took it

private IUserManagerRepository userManager;приватное чтение только для AppRoleManager userRole;

    public RoleController(IUserManagerRepository userManager, AppRoleManager userRole)
    {
        this.userManager = userManager;
        this.userRole = userRole;
    }

    // GET: Role
    public ActionResult Index()
    {
        return View(userRole.Roles);
    }

И мой взгляд

@using Domain.IdentityManager
@using Domain.Entities
@model IEnumerable<AppRole>

<div class="panel panel-primary">
<div class="panel-heading">Roles</div>
<table class="table table-striped">
    <tr>
        <th>ID</th>
        <th>Название</th>
        <th>Пользователи</th>
        <th style="min-width: 150px"></th>
    </tr>
        @foreach (AppRole role in Model)
        {
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>
                    @if (role.Users == null || role.Users.Count == 0)
                    {
                        @: Нет пользователей в этой роли
                    }
                    else
                    {

                }
                </td>
        }

</table>

1 Ответ

0 голосов
/ 08 февраля 2019

Чтобы исправить эту ошибку, вы должны сделать согласованной доступностью конструктора RoleController и его тип параметра.Поскольку конструктор public, его параметры также должны быть public.Компилятор жалуется на AppRoleManager<IdentityRole>, поэтому нам нужно посмотреть на него.Очевидно, AppRoleManager - это public, и похоже, что IdentityRole только здесь не public.Так что обновите свою декларацию

public class IdentityRole //
...