对象引用是必需的与构造函数的非静态字段
问题描述:
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
静态,虽然我不知道在代码的更大范围内是否有意义。