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上阅读)。

+0

你能解释这一点吗?我应该在哪里从控制器调用它?或者我可以在ActionFilter中设置?这种方法是否安全? – Rahul

+0

@Rahul你打算如何验证和授权你的用户? –

+0

是的,我正在使用JWT令牌认证,现在我需要访问Repo中不知道当前请求的用户信息。 – Rahul