#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, на самом деле изменилось довольно много вещей, и в статье блога нет данных. Необходимо изучить тесты и образцы