2016-12-20 1 views
0

Je suis relativement nouveau à Castle Windsor en particulier et IoC en général. J'enregistrer mon élément comme celui-ci:Castle Windsor: Transient Lifestyle nécessite HttpContext?

public static void Register(IWindsorContainer container) 
    { 
    container.Register(Classes.FromAssembly(Assembly.GetAssembly(typeof(GenericBaseRepository))) 
     .InSameNamespaceAs<GenericBaseRepository>() 
     .WithService.DefaultInterfaces() 
     .LifestyleTransient()); 
    } 

Je puis résoudre dans un morceau de code qui n'a pas HttpContext:

var baseRepository = ContainerManager.Container.Resolve<IBaseRepository>(); 

(IBaseRepository étant une interface mise en œuvre par GenericBaseRepository). Cela échoue avec le message suivant:

« HttpContext.Current est nul PerWebRequestLifestyle ne peut être utilisé dans ASP.Net. »

Ce qui me confond, parce que le style de vie que je choisis est transitoire, et non PerWebRequest. Bien sûr, HttpContext n'existe pas pendant une tâche planifiée - mais je n'en ai pas vraiment besoin, je veux juste une instance de mon Repository qui n'interagira avec aucune requête web. Alors, pourquoi Castle Windsor insiste-t-il pour exiger un HttpContext lors de la résolution de mon composant?

Répondre

3

Jetez un coup d'œil au message d'exception complète. Votre composant racine peut être transitoire mais l'exception indique l'une de ses dépendances utilise par style de vie de requête Web. Jetez un oeil à diagnostics debugger view de Windsor, qui peut vous aider à le localiser.

+1

Oui, c'était effectivement le cas. Après avoir lutté pour obtenir le bon .pdb pour Castle Core/Windsor et (réussir à entrer dans le code), c'était le coupable. –