我正在使用具有存储库模式的服务层。控制器依赖于服务层,服务层依赖于存储库。
出于授权目的,我必须将登录的用户信息传递给存储库层,并且考虑到我似乎有一个广泛的注入链,我正在尝试确定将用户信息注入存储库的最佳方法:
controller -> service(s) -> repositories -> logged in user info.
我想简单的方法是将用户信息传递给被调用的服务方法(即FindById(int primaryKey, User currentUser)
等)
但这与注入用户信息相比,在未来似乎非常有限且存在问题。
解决此问题的推荐方法是什么?
我对文章中的人似乎是如何实现 ICurrentUserFetcher 感到有些困惑。我认为这将提供 IIdentity 不提供的额外属性,但本文并没有说得很清楚。
class GenericRepository<T>: IRepository<T> {
private readonly ICurrentUserFetcher currentUserFetcher;
public GenericRepository<T>(Func<IIdentity> currentUserFetcher) {
this.currentUserFetcher = currentUserFetcher;
}
public void Update(T entity) {
var currentUser = currentUserFetcher();
...
}
}
var repo = new GenericRepository<Person>(() => HttpContext.Current.User.Identity);