【问题标题】:object reference is required for the non-static field with constructor具有构造函数的非静态字段需要对象引用
【发布时间】:2016-03-15 01:28:46
【问题描述】:
 public class Auth
{

    private IBaseRepository<User> users;

    public Auth(IBaseRepository<User> users)
    {
        this.users = users;
    }

    private const string UserKey = "simpleBlog.Atuh.UserKey";

    public static User User
    {
        get
        {
            if (!HttpContext.Current.User.Identity.IsAuthenticated)
                return null;

            var user = HttpContext.Current.Items[UserKey] as User;

            if(user == null)
            {

                 user = users.GetAll().FirstOrDefault(u => u.Name == HttpContext.Current.User.Identity.Name);

                if (user == null)
                    return null;

                HttpContext.Current.Items[UserKey] = user;

            }

            return user;
        }
    }

}

我在这部分遇到了错误,但我不知道如何解决。

user = users.GetAll().FirstOrDefault(u => u.Name == HttpContext.Current.User.Identity.Name);   

【问题讨论】:

    标签: .net class static repository


    【解决方案1】:

    我会让这个非静态的:

    public static User User
    

    public User User
    

    这个类被编写成可以完全接受构造函数注入。我会根据需要(瞬态)或每个 Web 请求实例化一次。

    如果您从未使用过依赖注入,那么这是尝试它的完美场景。

    【讨论】:

      【解决方案2】:

      这是一个实例字段

      private IBaseRepository<User> users;
      

      但这是一个静态吸气剂

      public static User User
      

      您无法从静态 getter 访问实例字段 users

      一种解决方案是将users 设为静态,但我不知道这在您的代码的更大上下文中是否有意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多