저장소 패턴이있는 서비스 계층을 사용하고 있습니다. 컨트롤러는 서비스 계층에 대한 종속성을 가지며 서비스 계층은 저장소에 대한 종속성을 갖습니다.적절한 방법으로 인증 된 사용자를 내 저장소 클래스에 삽입
내가 승인 용도 저장소 층에 대한 사용자 정보를 기록 통과해야하고 I는 광범위한 분사 체인 것 같다 것을 고려 저장소에 사용자 정보를 주입하기위한 가장 좋은 방법을 결정하기 위해 시도하고있다 :
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);
이 문제를 해결하는 것으로 보이는 기사를 찾은 것 같습니다. 문제는 저장소에서 http 컨텍스트를 분리하려고 시도하고 있으며 이것이 멋지게 수행되는 것입니다. 이 기사는 http://stackoverflow.com/questions/2946042/accessing-the-identity-object-in-a-mvc-repository입니다. 디커플링 관점에서이 접근법에 어떤 부정적인 문제가 있습니까? – user1790300