3

リポジトリ パターンのサービス レイヤーを使用しています。コントローラーはサービス レイヤーに依存し、サービス レイヤーはリポジトリに依存します。

ログインしたユーザー情報を承認目的でリポジトリ レイヤーに渡す必要があり、広範なインジェクション チェーンがあるように見えることを考慮して、ユーザー情報をリポジトリに挿入するための最良の方法を決定しようとしています。

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);
4

1 に答える 1