2012-06-25 5 views
4

J'ai besoin de démarrer un nouveau thread pour une tâche de longue durée (écrit dans le magasin de documents, déclenchant le ré-index, etc.). J'utilise Ninject dans un site Web ASP.Net MVC. Essentiellement, je veux engendrer un nouveau thread à partir de ma demande Http, qui instancie ses propres objets, en s'assurant qu'aucune connexion de base de données etc. n'est utilisée à partir de la demande HTTP dans le nouveau thread. Je ne suis pas sûr de ce qu'il faut utiliser pour générer le thread ou comment configurer Ninject pour ne pas réutiliser ma session de base de données à partir du contexte de la requête Web.en utilisant Ninject dans un nouveau thread

ci-dessous est un diagramme de séquence de base du problème

J'ai lu un peu sur les étendues nommées dans Ninject mais je ne sais pas si d'une façon qui est lié.

Ninject Thread Scope

Le code pour mon CommandProcessor qui engendrera le nouveau fil est:

public class CommandProcessor 
{ 
    private IKernel _serviceLocator; 

    public CommandProc(IKernel serviceLocator) 
    { 
     _serviceLocator = serviceLocator; 
    } 

    public void Process<TCommand>(TCommand command) where T : ICommand 
    { 
     var commandHandlers = _serviceLocator.Get<ICommandHandler<TCommand>>(); 

     foreach (var commandHandler in commandHandlers) 
     { 
      // I want this call to be asynchronous 
      commandHandler.Handle(command); 
     } 
    } 
} 

Merci à l'avance,

Hamish.

Répondre

2

Lorsque vous frayer votre nouveau thread, créez un nouveau contexte d'activation de Ninject à utiliser dans le fil:

 Thread thread = new Thread(new ThreadStart(() => 
      { 
       using (IActivationBlock activation = kernel.BeginBlock()) 
       { 
        var commandHandlers = activation.Get<ICommandHandler<TCommand>>(); 

        foreach (var commandHandler in commandHandlers) 
        { 
         commandHandler.Handle(command); 
        } 
       } 
      })); 
     thread.Start(); 
+0

Hmm, cela va rendre le contexte DB aller de périmètre de la requête Web à l'habitude en régime transitoire il? – Anders

Questions connexes