2010-01-28 2 views
1

Je rencontre des problèmes. J'ai une sous-classe basée sur exemple d'interface fluide de Randy Patterson ici:Besoin d'aide pour accéder aux propriétés dans la classe d'inclusion de la sous-classe

Randy Patterson's Fluent Interface Design Page

Je suis le sous-classement d'une classe utilisateur et besoin de passer les propriétés définies dans à la méthode ci-dessous CreateNewUser au sein de la sous-classe 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; 
        } 

       } 

et _membership.CreateUser a la signature:

public MembershipUser CreateUser(User user, out MembershipCreateStatus status); 

Je reçois l'erreur:

Cannot access a non-static member of outer type 'MyProject.Schema.User' via nested type 'MyProject.Schema.User.UserFluentInterface'

Je ne sais pas comment résoudre ce problème. Code est la suivante:

User user = _someAPI.GetUserProfile(txtEmail.Text); 

user.Set 
    .Email(txtEmail.Text) 
    .Password(txtPassword.Text) 
    .CreateNewUser(); 

Maintenant, j'ai une classe utilisateur avec une sous-classe:

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

       } 

      } 

     } 

Répondre

0

Je pense que vous allez devoir passer à la fois l'utilisateur et l'adhésion à votre UserFluentInterface:

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

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

puis utiliser _Membership au lieu de _membership. dans votre méthode CreateNewUser()

0

Vous pouvez simplement écrire User user = _User, si vous n'avez pas besoin d'une copie de _User.

Sinon, faites une copie de _User et transmettez-la.

+0

Merci. Oui, j'ai essayé cela mais continuez à obtenir l'erreur suivante (d'où le post): Impossible d'accéder à un membre non statique de type externe "MyProject.Schema.User" via le type imbriqué "MyProject.Schema.User.UserFluentInterface" Des pensées? –

+0

Lisez cet article: http://www.codeproject.com/KB/cs/nested_csclasses.aspx Fondamentalement, cela signifie que vous ne pouvez pas accéder aux membres de l'utilisateur dans UserFluentInterface. Cependant, vous pouvez accéder à ces membres dans UserFluentInterface via l'objet '_User', comme' _User.Email', et pas seulement 'Email'. Je pense que vous feriez mieux de poster le code complet de 'UserFluentInterface' pour voir exactement où cette erreur se produit. – Weiming

+0

Bonjour. Merci encore. Il n'y a pas beaucoup plus à la classe UserFluentInterface, sauf pour un tas de getter et setters qui n'ont vraiment rien à voir avec le problème. J'ai posté un lien vers où je reçois le code si cela est utile. Si vous ressentez encore le besoin d'un vidage de code, faites-le moi savoir et je le ferai. J'ai également posté la classe CreateNewUser en haut car c'est là que l'erreur est lancée. il a quelque chose à voir avec la ligne _membership.CreateNewUser et "_memberhip" est ce dont se plaint l'intellisense. Je suis vraiment coincé ici .. aide beaucoup apprécié. Merci encore. –

Questions connexes