У меня возникли проблемы. У меня есть подкласс, основанный на беглом интерфейс, например Рэнди Паттерсона здесь:Нужна помощь Доступ к свойствам в классе защиты от подкласса
Randy Patterson's Fluent Interface Design Page
Я подклассы класса пользователя и нужно передать свойства, установленные в нем ниже CreateNewUser метода в UserFluentInterface подкласса.
public void CreateNewUser()
{
try
{
User user = (User)_User;
MembershipCreateStatus status;
MembershipUser memuser = _membership.CreateUser(user, out status);
}
catch (Exception e)
{
string message = e.Message;
}
}
и _membership.CreateUser имеет подпись:
public MembershipUser CreateUser(User user, out MembershipCreateStatus status);
я получаю ошибку:
Cannot access a non-static member of outer type 'MyProject.Schema.User' via nested type 'MyProject.Schema.User.UserFluentInterface'
Я не знаю, как решить эту проблему. Код выглядит следующим образом:
User user = _someAPI.GetUserProfile(txtEmail.Text);
user.Set
.Email(txtEmail.Text)
.Password(txtPassword.Text)
.CreateNewUser();
Теперь у меня есть класс пользователей с подкласса:
public class User : ProfileBase, ISessionMgrEntry
{
MyMembershipProvider _membership = null;
UserFluentInterface _set = null;
public User()
{
_membership = (MyMembershipProvider)Membership.Providers["MyMembershipProvider"];
_set = new UserFluentInterface(this);
}
public UserFluentInterface Set
{
get { return _set; }
}
#region ProfileBase Members
[SettingsAllowAnonymous(false), CustomProviderData("Email;string")]
public string Email { get { return base["Email"] as string; } set { base["Email"] = value; } }
[SettingsAllowAnonymous(false), CustomProviderData("Password;string")]
public string Password { get { return base["Password"] as string; } set { base["Email"] = value; } }
public class UserFluentInterface
{
private readonly User _User;
public UserFluentInterface(User User)
{
_User = User;
}
public UserFluentInterface Email(string email)
{
_User.Email = email;
return this;
}
public UserFluentInterface Password(string password)
{
_User.Password = password;
return this;
}
public void CreateNewUser()
{
try
{
User user = ???? // HOW DO I ACCESS THE PROPERTIES THAT WERE ORIGINALLY SET AND PASS THEM AS AN OBJECT BELOW?
MembershipUser memuser = _membership.CreateUser(user);
}
catch (Exception e)
{
string message = e.Message;
}
}
}
}
Спасибо. Да, я пробовал это, но продолжаю получать следующую ошибку (отсюда сообщение): Невозможно получить доступ к нестатическому члену внешнего типа «MyProject.Schema.User» через вложенный тип «MyProject.Schema.User.UserFluentInterface» Любые мысли? –
Прочтите эту статью: http://www.codeproject.com/KB/cs/nested_csclasses.aspx В основном это означает, что вы не можете получить доступ к членам Пользователя в UserFluentInterface. Однако вы можете получить доступ к этим элементам в UserFluentInterface через объект '_User', например' _User.Email', а не только 'Email'. Я думаю, вам лучше разместить полный код для 'UserFluentInterface', чтобы узнать, где именно происходит эта ошибка. – Weiming
Привет. Еще раз спасибо. Для класса UserFluentInterface не так много, за исключением того, что у вас есть еще больше геттеров и сеттеров, которые действительно не имеют никакого отношения к этой проблеме. Я разместил ссылку на то, где я получаю код, если это полезно. Если вы все еще чувствуете необходимость в дампе кода, дайте мне знать, и я это сделаю. Я также разместил класс CreateNewUser вверх, так как там возникает ошибка. это как-то связано с линией _membership.CreateNewUser и «_memberhip» - это то, о чем жалуется intellisense. Я действительно застрял здесь. Помогите оценить. Еще раз спасибо. –