OWIN Self-Host Web API 2:如何使用Autofac将当前用户注入通用存储库
问题描述:
我正在构建OWIN自托管Web API 2应用程序,并且使用通用存储库模式并使用Autofac进行依赖项注入。OWIN Self-Host Web API 2:如何使用Autofac将当前用户注入通用存储库
我的通用存储库类;
public abstract class Repository<T> : IRepository<T> where T : BaseEntity
{
private DbContext context_;
private Identity _currentUser; //This needs to be resolved
public Repository(DbContext context)
{
context_ = context;
}
public T Update(T item)
{
//item.ModifiedBy = _currentUser.UserName; // The value needs to be assigned
context_.SaveChanges();
return item;
}
}
问题:
我需要访问当前用户和我需要更新ModifiedBy领域的数据库中。
我试图避免构造函数注入,因为通过传递DbContext作为构造函数参数在项目中的几个地方创建存储库对象。
是否有其他方法可以在不修改现有代码的情况下做到这一点? 任何人都可以帮助我实现我的要求。
注:
备选地我可以重写的SaveChanges中的DbContext类()方法。 但我再次无法访问当前那里。
答
身份是从Thread.CurrentPrincipal.Identity
访问,没有任何问题设置为任何在测试设置例如。 Thread.CurrentPrincipal = new ClaimsPrincipal(identity);
编辑
是CurrentPrincipal使用安全,你通常会创建一些实用程序功能读出你需要的值。或者你当然可以创建自己的抽象,并将其注入到你的类中,但我没有看到这一点。
btw。通用的存储库永远不是明智的选择(在DDD上阅读)。
你能解释这一点吗?我应该在哪里从控制器调用它?或者我可以在ActionFilter中设置?这种方法是否安全? – Rahul
@Rahul你打算如何验证和授权你的用户? –
是的,我正在使用JWT令牌认证,现在我需要访问Repo中不知道当前请求的用户信息。 – Rahul