对象引用是必需的与构造函数的非静态字段

问题描述:

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

我会做这个非静态:

public static User User 

public User User 

类是这么写的,它会完全接受构造函数注入。我会根据需要(临时)或者每个Web请求一次实例化它。

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

这是一个实例字段

private IBaseRepository<User> users; 

,但是这是一个静态的吸气

public static User User 

不能从静态吸气访问实例字段users

一个解决方案是使users静态,虽然我不知道在代码的更大范围内是否有意义。