2010-01-28 52 views
1

我有问题。我有一个基于兰迪·帕特森的流畅这里例如接口的子类:需要帮助访问属性从子类包围类

Randy Patterson's Fluent Interface Design Page

我继承用户类,并且需要通过在其设置为UserFluentInterface子类中的以下CreateNewUser方法的属性。

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.UserFluentInterface' 访问外部类型'MyProject.Schema.User'的非静态成员 有什么想法? – 2010-01-28 22:26:09

+0

阅读本文:http://www.codeproject.com/KB/cs/nested_csclasses.aspx 基本上,它意味着你不能访问UserFluentInterface中的用户的成员。 但是,您可以通过'_User'对象访问UserFluentInterface中的成员,比如'_User.Email',而不仅仅是'Email'。 我想你最好发布'UserFluentInterface'的完整代码来查看究竟发生了什么错误。 – Weiming 2010-01-28 23:30:13

+0

嗨。再次感谢。 UserFluentInterface类没有什么更多,除了更多的getter和setter与这个问题无关。如果有帮助,我已经发布了一个链接,指向我获取代码的位置。如果你仍然觉得需要代码转储让我知道,我会这样做。我也发布了CreateNewUser类,因为这是抛出错误的地方。它与_membership行有关.CreateNewUser和“_memberhip”是intellisense抱怨的。我真的被困在这里..非常感谢。再次感谢。 – 2010-01-29 00:52:33