2017-07-20 1 views
0

Je construis une application OWIN Web-Hosted Web API 2 et j'utilise un modèle de référentiel générique et utilise Autofac pour l'injection de dépendances.OWIN Self-Host Web API 2: Comment injecter un utilisateur courant dans un référentiel générique avec Autofac

Ma classe de référentiel générique;

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; 
    } 

} 

Problème:

J'ai besoin d'accéder à l'utilisateur en cours et j'ai besoin de mettre à jour la base de données avec le champ ModifiedBy.

J'essaie d'éviter l'injection de constructeur, car l'objet de référentiel est créé à plusieurs endroits dans le projet en passant DbContext en tant qu'argument de constructeur.

Existe-t-il d'autres moyens de le faire sans trop modifier le code existant? Quelqu'un pourrait-il m'aider à réaliser mon exigence.

Note:

En variante I peut remplacer la méthode SaveChanges() dans la classe DbContext. Mais encore une fois je ne peux pas accéder au courant là.

Répondre

1

On accède à l'identité à partir de Thread.CurrentPrincipal.Identity, il n'y a pas de problème pour régler ceci à quoi que ce soit dans une configuration de test, par exemple. Thread.CurrentPrincipal = new ClaimsPrincipal(identity);

Edité

Oui CurrentPrincipal est sûr à utiliser, vous devez normalement créer des fonctions utilitaires pour lire les valeurs dont vous avez besoin. Ou vous pouvez bien sûr créer votre propre abstraction, et l'injecter dans vos cours, mais je n'en vois pas l'intérêt.

btw. Les dépôts génériques ne sont jamais un choix judicieux (lire sur DDD).

+0

Pouvez-vous m'expliquer davantage? Où devrais-je appeler cela du contrôleur? ou puis-je le définir dans ActionFilter? Cette méthode est-elle sûre? – Rahul

+0

@Rahul comment comptez-vous authentifier et autoriser votre utilisateur? –

+0

Oui, j'utilise l'authentification par jeton JWT et maintenant j'ai besoin d'accéder aux informations d'utilisateur à l'intérieur de Repo qui n'est pas au courant de la demande actuelle. – Rahul