2010-01-28 3 views
1

У меня возникли проблемы. У меня есть подкласс, основанный на беглом интерфейс, например Рэнди Паттерсона здесь:Нужна помощь Доступ к свойствам в классе защиты от подкласса

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; 
        } 

       } 

      } 

     } 

ответ

0

Я думаю, что вы будете иметь, чтобы передать оба пользователя и членство в вашем UserFluentInterface:

  public class UserFluentInterface 
      { 
       private readonly User _User; 
       private readonly Membership _Membership; 

       public UserFluentInterface(User User, Membership membership) 
       { 
        _User = User; 
        _Membership = membership; 
       } 
      } 

, а затем использовать _Membership вместо _membership. в вашем методе CreateNewUser()

0

Вы можете просто написать User user = _User, если вам не нужна копия _User.

В противном случае сделайте копию _User и передайте его.

+0

Спасибо. Да, я пробовал это, но продолжаю получать следующую ошибку (отсюда сообщение): Невозможно получить доступ к нестатическому члену внешнего типа «MyProject.Schema.User» через вложенный тип «MyProject.Schema.User.UserFluentInterface» Любые мысли? –

+0

Прочтите эту статью: http://www.codeproject.com/KB/cs/nested_csclasses.aspx В основном это означает, что вы не можете получить доступ к членам Пользователя в UserFluentInterface. Однако вы можете получить доступ к этим элементам в UserFluentInterface через объект '_User', например' _User.Email', а не только 'Email'. Я думаю, вам лучше разместить полный код для 'UserFluentInterface', чтобы узнать, где именно происходит эта ошибка. – Weiming

+0

Привет. Еще раз спасибо. Для класса UserFluentInterface не так много, за исключением того, что у вас есть еще больше геттеров и сеттеров, которые действительно не имеют никакого отношения к этой проблеме. Я разместил ссылку на то, где я получаю код, если это полезно. Если вы все еще чувствуете необходимость в дампе кода, дайте мне знать, и я это сделаю. Я также разместил класс CreateNewUser вверх, так как там возникает ошибка. это как-то связано с линией _membership.CreateNewUser и «_memberhip» - это то, о чем жалуется intellisense. Я действительно застрял здесь. Помогите оценить. Еще раз спасибо. –

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