我正在构建一个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()方法。 但我再也无法访问那里的电流。
答案 0 :(得分:1)
从Thread.CurrentPrincipal.Identity
访问身份,将此设置为测试设置中的任何内容都没有问题,例如。 Thread.CurrentPrincipal = new ClaimsPrincipal(identity);
<强>被修改强>
是CurrentPrincipal使用是安全的,您通常会创建一些实用程序函数来读出您需要的值。或者您当然可以创建自己的抽象,并将其注入您的类,但我没有看到这一点。
顺便说一句。通用存储库永远不是明智的选择(阅读DDD)。