Я использую сервисный уровень с шаблоном репозитория. Контроллер имеет зависимость от уровня обслуживания, а уровень сервиса зависит от репозитория.Правильный способ зависимостей ввести аутентифицированный пользователь в мой класс репозитория
Я должен пройти вход в пользовательской информации в хранилище слоя для целей авторизации и пытаюсь определить наилучший подход для инъекций пользовательской информации в хранилище, учитывая, что я, кажется, имею обширную инъекционную цепь:
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