Настройка upp AspNet.Идентификация.RavenDB с использованием Tugberk Ugurlu: пример проекта

#c# #asp.net-mvc #model-view-controller #ravendb

#c# #asp.net-mvc #модель-представление-контроллер #ravendb

Вопрос:

Итак, я реализовал все из этого примера проектов с github: http://www.tugberkugurlu.com/archive/aspnet-identity-ravendb—fully-asynchronous-new-and-sweet-asp-net-identity-implementation-for-ravendb

Но я получаю сообщение об ошибке в файле IdentityModels.cs

 public class ApplicationUser : RavenUser
{
    public ApplicationUser(string userName)
        : base(userName) <--- here, explained below
    {
    }
}
 

Ошибка гласит:
Ошибка 29 ‘AspNet.Идентификация.RavenDB.Entities.RavenUser’ не содержит конструктора, который принимает 1 аргумент

Но в Tugberk Ugurlus example-prject все работает нормально. Я не знаю, чего мне не хватает. Указанный выше ApplicationUser наследовал от RavenUser, если я в примере проекта перейду к определению для RavenUser, это приведет меня к этому файлу:

 public class RavenUser : IUser
{
    private List<RavenUserClaim> _claims;
    private List<RavenUserLogin> _logins;

    [JsonConstructor]
    public RavenUser(string userName)
    {
        if (userName == null) throw new ArgumentNullException("userName");

        Id = GenerateKey(userName);
        UserName = userName;
        _claims = new List<RavenUserClaim>();
        _logins = new List<RavenUserLogin>();
    }

    public RavenUser(string userName, string email) : this(userName)
    {
        Email = email;
    }

    public string Id { get; private set; }
    public string UserName { get; set; }
    public string Email { get; private set; }
    public string PhoneNumber { get; private set; }
    public string PasswordHash { get; private set; }
    public string SecurityStamp { get; private set; }
    public bool IsLockoutEnabled { get; private set; }
    public bool IsTwoFactorEnabled { get; private set; }

    public int AccessFailedCount { get; private set; }
    public DateTimeOffset? LockoutEndDate { get; private set; }

    public IEnumerable<RavenUserClaim> Claims
    {
        get
        {
            return _claims;
        }

        private set
        {
            if (_claims == null)
            {
                _claims = new List<RavenUserClaim>();
            }

            _claims.AddRange(value);
        }
    }
    public IEnumerable<RavenUserLogin> Logins
    {
        get
        {
            return _logins;
        }

        private set
        {
            if (_logins == null)
            {
                _logins = new List<RavenUserLogin>();
            }

            _logins.AddRange(value);
        }
    }

    public virtual void EnableTwoFactorAuthentication()
    {
        IsTwoFactorEnabled = true;
    }

    public virtual void DisableTwoFactorAuthentication()
    {
        IsTwoFactorEnabled = false;
    }

    public virtual void EnableLockout()
    {
        IsLockoutEnabled = true;
    }

    public virtual void DisableLockout()
    {
        IsLockoutEnabled = false;
    }

    public virtual void SetEmail(string email)
    {
        Email = email;
    }

    public virtual void SetPhoneNumber(string phoneNumber)
    {
        PhoneNumber = phoneNumber;
    }

    public virtual void SetPasswordHash(string passwordHash)
    {
        PasswordHash = passwordHash;
    }

    public virtual void SetSecurityStamp(string securityStamp)
    {
        SecurityStamp = securityStamp;
    }

    public virtual void IncrementAccessFailedCount()
    {
        AccessFailedCount  ;
    }

    public virtual void ResetAccessFailedCount()
    {
        AccessFailedCount = 0;
    }

    public virtual void LockUntil(DateTimeOffset lockoutEndDate)
    {
        LockoutEndDate = lockoutEndDate;
    }

    public virtual void AddClaim(Claim claim)
    {
        if (claim == null)
        {
            throw new ArgumentNullException("claim");
        }

        AddClaim(new RavenUserClaim(claim));
    }

    public virtual void AddClaim(RavenUserClaim ravenUserClaim)
    {
        if (ravenUserClaim == null)
        {
            throw new ArgumentNullException("ravenUserClaim");
        }

        _claims.Add(ravenUserClaim);
    }

    public virtual void RemoveClaim(RavenUserClaim ravenUserClaim)
    {
        if (ravenUserClaim == null)
        {
            throw new ArgumentNullException("ravenUserClaim");
        }

        _claims.Remove(ravenUserClaim);
    }

    public virtual void AddLogin(RavenUserLogin ravenUserLogin)
    {
        if (ravenUserLogin == null)
        {
            throw new ArgumentNullException("ravenUserLogin");
        }

        _logins.Add(ravenUserLogin);
    }

    public virtual void RemoveLogin(RavenUserLogin ravenUserLogin)
    {
        if (ravenUserLogin == null)
        {
            throw new ArgumentNullException("ravenUserLogin");
        }

        _logins.Remove(ravenUserLogin);
    }

    // statics

    internal static string GenerateKey(string userName)
    {
        return string.Format(Constants.RavenUserKeyTemplate, userName);
    }
}
 

Но в моем собственном проекте наследование также является RavenUser. Но если я перейду к этому определению, это приведет меня к этому файлу метаданных:

 #region Assembly AspNet.Identity.RavenDB.dll, v1.0.1.0
//          C:UsersComputerDesktopAppHarborRepositoryBlogpackagesAspNet.Identity.RavenDB.1.0.1libn    et45AspNet.Identity.RavenDB.dll
#endregion

using System.Collections.Generic;

namespace AspNet.Identity.RavenDB.Entities
{
public class RavenUser : User
{
    public RavenUser();

    public ICollection<RavenUserClaim> Claims { get; set; }
    public ICollection<RavenUserLogin> Logins { get; set; }
}
}
 

Комментарии:

1. Вы уверены, что используете последнюю предварительную версию. У меня была проблема, когда он сказал, что не принимает 0 аргументов. Я использую версию Pre-6, вышедшую из 1.0.1

Ответ №1:

На первый взгляд кажется, что в вашем коде неверный оператор «using», который указывает на AspNet.Идентификация.RavenDB RavenUser вместо вашей собственной реализации.

Посмотрите, есть ли "using AspNet.Identity.RavenDB.Entities" в вашем классе ApplicationUser, и удалите его. Если это нарушает другие части вашего кода, вы можете присвоить своему классу RavenUser другое имя.

Комментарии:

1. Нет .. это неверно. Мы хотим использовать класс RavenUser и эту реализацию. Более новая предварительная версия вводит некоторую новую переменную в базовый конструктор RavenUser, на самом деле изменилось довольно много вещей, и в статье блога нет данных. Необходимо изучить тесты и образцы