C# 如何解决这个DI缓存问题
我正在为我的C# 如何解决这个DI缓存问题,c#,asp.net-web-api,dependency-injection,entity-framework-6,castle-windsor,C#,Asp.net Web Api,Dependency Injection,Entity Framework 6,Castle Windsor,我正在为我的WebAPI项目使用windsor castleDI以及Generic Repository模式 用户忘记了密码,所以他调用ForgotPassword API。此API会触发带有随机密码的电子邮件 用户通过登录API使用用户名和随机密码登录 登录后用户希望通过调用重置密码API重置密码 用户尝试使用此新密码再次登录 但是,当他这样做时,他会得到用户凭据无效异常。而如果他使用旧密码,则可以登录 当我签入数据库时,密码已正确更新。但当我检查DAL方法时,它使用了EF。密码仍然是旧密码
WebAPI
项目使用windsor castle
DI以及Generic Repository模式
用户忘记了密码,所以他调用ForgotPassword API。此API会触发带有随机密码的电子邮件
用户通过登录API使用用户名和随机密码登录
登录后用户希望通过调用重置密码API重置密码
用户尝试使用此新密码再次登录
但是,当他这样做时,他会得到用户凭据无效
异常。而如果他使用旧密码,则可以登录
当我签入数据库时,密码已正确更新。但当我检查DAL方法时,它使用了EF。密码仍然是旧密码
但如果我重新启动的网站是IIS,那么用户可以使用新密码登录
我的DAL方法
public bool IsUserValid(string username, string password)
{
//#inspection line for me
var user = GetUser(username);
return user != null && password.EncryptStringAES() == user.Password;
}
private User GetUser(string username)
{
userName = !string.IsNullOrEmpty(userName) ? userName.Trim().ToLower() : string.Empty;
return _userRepository.GetQuery()
.FirstOrDefault(x => x.Email == userName);
}
如果我在#检查行为我调试,我会看到用户对象仍然有旧密码
DI配置
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes
.FromAssemblyNamed("CustomerApp.EF")
.WithService.Self()
.LifestylePerWebRequest());
}
我尝试了LifestylePerThread
&其他方法,但仍然存在相同的问题。而如果我更新我的DAL如下
public bool IsUservalid(string username, string password)
{
using(AppContext entities = new AppContext()
{
var user = (from c in entities.tblUsers
where c.Email == username
select c);
//if I debug now, no issue
}
}
以上补丁对我无效
那么是什么导致了这一点&我该如何解决这个问题
非常感谢您的帮助/建议。
谢谢。既然我们现在开始讨论,我必须提醒大家注意,根据他们的指导原则,这个问题在可能导致它的原因和/或问题中提供的信息是充分的这一事实上过于宽泛
我建议,既然您已经确定返回的用户对象仍然具有旧密码,那么您应该将调试工作集中在代码的该部分上,并可能将问题细化到包含应用程序该部分的代码上
另外,如果可能的话,请随意附加/链接一个精简版的应用程序,该应用程序会重现问题,这有助于识别问题。既然我们现在就这样做,我必须提请你注意,根据他们的指导方针,这一问题在可能导致这一问题的原因和/或问题中提供的信息充分性方面过于宽泛
我建议,既然您已经确定返回的用户对象仍然具有旧密码,那么您应该将调试工作集中在代码的该部分上,并可能将问题细化到包含应用程序该部分的代码上
如果可能的话,也可以随意附加/链接一个精简版的应用程序,它可以重现问题,这有助于识别问题