Нужна помощь Доступ к свойствам во вложенном классе из подкласса - PullRequest
1 голос
/ 29 января 2010

У меня проблемы. У меня есть подкласс на основе беглого примера интерфейса Рэнди Паттерсона:

Страница дизайна интерфейса Рэнди Паттерсона

Я создаю подкласс класса User, и мне нужно передать свойства, установленные в нем, в метод 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);

Я получаю сообщение об ошибке:

Невозможно получить доступ к нестатическому члену внешний тип "MyProject.Schema.User" через вложенный тип 'MyProject.Schema.User.UserFluentInterface'

Я не уверен, как решить эту проблему. Код выглядит следующим образом:

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

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

Теперь у меня есть класс User с подклассом:

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

                }

            }

       }

Ответы [ 2 ]

0 голосов
/ 29 января 2010

Я думаю, вам нужно будет передать как пользователя, так и членство в свой 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 голосов
/ 29 января 2010

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

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

...