2014-05-21 16 views
5

Ho creato un semplice componente di middleware OWIN che mi fornirà un oggetto User e lo aggiungerò a HttpContext.Current.Items in modo che sia disponibile per tutti i controller e le viste per ogni richiesta.Utilizzare Ninject DI nel proprio middleware OWIN

Ecco il mio codice:

public class SetCurrentUserMiddleware : OwinMiddleware 
{ 
    public SetCurrentUserMiddleware(OwinMiddleware next) : base(next) 
    { 
    } 

    public override Task Invoke(IOwinContext context) 
    { 
     if (context.Request.User.Identity.IsAuthenticated) 
     { 
      // Do some work to get a userId... (omitted) 
      var repo = new UserRepository(); 
      User user = repo.Get(userId); 
      HttpContext.Current.Items["CurrentUserContext"] = user; 
     } 

     return Next.Invoke(context); 
    } 
} 

sto usando Ninject nella mia applicazione web - come posso refactoring di questo middleware in modo che il mio UserRepository viene iniettato come una dipendenza? Ciò è effettivamente possibile?

+2

Avete scelto qualsiasi implementazione. Anch'io ho questa domanda – Saravanan

+0

Spero di non aver fatto una domanda stupida, ma hai provato a collegarlo al tuo contenitore IoC/DI? 'Collega (). A ();' –

risposta

0

Secondo this page, è possibile fornire solo i propri argomenti del costruttore.

public class SetCurrentUserMiddleware : OwinMiddleware 
{ 
    private readonly IUserRepository userRepository; 

    public SetCurrentUserMiddleware(OwinMiddleware next, IUserRepository userRepository) : base(next) 
    { 
     if (userRepository == null) 
      throw new ArgumentNullException("userRepository"); 
     this.userRepository = userRepository; 
    } 

    public override Task Invoke(IOwinContext context) 
    { 
     if (context.Request.User.Identity.IsAuthenticated) 
     { 
      // Do some work to get a userId... (omitted) 
      User user = this.userRepository.Get(userId); 
      HttpContext.Current.Items["CurrentUserContext"] = user; 
     } 

     return Next.Invoke(context); 
    } 
} 
+0

Assicurati di utilizzare i pacchetti di Ninject Owin come mostrato qui https://github.com/ninject/Ninject.Web.Common/wiki/Setting-up- a-OWIN-WebApi-application – JRadness

+0

Quando faccio questo ottengo un'eccezione sulla linea in cui voglio registrare il middleware (app.use ()) Ulteriori informazioni: La classe 'InCube.DigitalAdvisory.WebApi.LoggingMiddleware 'non ha un costruttore che accetta 1 argomento. – Efrain

Problemi correlati