OWIN 自托管 Web API 2:如何使用 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;
}
}

问题:

我需要访问当前用户,并且需要使用"修改者"字段更新数据库。

我试图避免构造函数注入,因为通过将 DbContext 作为构造函数参数传递,在项目中的多个位置创建了存储库对象。

有没有其他方法可以在不对现有代码进行太多修改的情况下做到这一点。 谁能帮我达到我的要求。

注意:

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

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

编辑

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

顺便说一句,通用存储库从来都不是一个明智的选择(阅读DDD(。

最新更新