OWIN自主Web API 2:如何使用Autofac将当前用户注入通用存储库

时间:2017-07-20 10:19:30

标签: c# asp.net-web-api repository asp.net-identity autofac

我正在构建一个OWIN自托管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作为构造函数参数传递,在项目的多个位置创建了存储库对象。

有没有其他方法可以在不修改现有代码的情况下执行此操作。 任何人都可以帮我实现我的要求。

注意:

或者我可以覆盖DbContext类中的SaveChanges()方法。 但我再也无法访问那里的电流。

1 个答案:

答案 0 :(得分:1)

Thread.CurrentPrincipal.Identity访问身份,将此设置为测试设置中的任何内容都没有问题,例如。 Thread.CurrentPrincipal = new ClaimsPrincipal(identity);

<强>被修改

CurrentPrincipal使用是安全的,您通常会创建一些实用程序函数来读出您需要的值。或者您当然可以创建自己的抽象,并将其注入您的类,但我没有看到这一点。

顺便说一句。通用存储库永远不是明智的选择(阅读DDD)。