Orchard: DependencyResolutionException e IWorkContextAccessor

8 nov 2012 12:11

Per un po’ di tempo, durante la migrazione di vari siti alle nuove versioni di Orchard, la cartella Logs veniva riempita da errori DependencyResolutionException, in particolare all’avvio del sito e a seguito della rimozione e aggiunta di moduli. Il problema era dovuto all’uso errato dell’injection di WorkContext.

L’errore

Di seguito l’errore registrato dal sistema, che poteva essere generato a partire sia dal TaxonomyService sia dal BlogService:

Orchard.Exceptions.DefaultExceptionPolicy - An unexpected exception was caught
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an
invocation. ---> Autofac.Core.DependencyResolutionException: No scope with a Tag matching
'work' is visible from the scope in which the instance was requested. This generally indicates
that a component registered as per-HTTP request is being reqested by a SingleInstance()
component (or a similar scenario.) Under the web integration always request dependencies
from the DependencyResolver.Current or ILifetimeScopeProvider.RequestLifetime, never from
the container itself.

Purtroppo in rete non sono disponibili molte informazioni a riguardo e non conoscendo bene AutoFac ho dovuto andare un po’ a tentativi. Nella comunità Orchard il problema era stato aperto già da mesi, senza però soluzioni.

Il problema

Premetto che trattandosi di un errore abbastanza generico e lanciato da servizi diversi, è possibile che la causa da me individuata non risolva tutti i possibili casi.

Come consuetudine ho cercato di risolvere l’oscuro problema disabilitando un modulo alla volta e quindi, individuato il modulo incriminano ho disattivato le sue funzionalità… sono così arrivato al costruttore del Driver di una delle Content Part definite che richiedeva un WorkContext. In realtà per accedere tramite injection è necessario usare IWorkContextAccessor, come poi ho scoperto in questo post e come è corretto in ambito DI: utilizzare l’interfaccia e non l’oggetto.

Tra gli spiacevoli inconvenienti il fatto che il dettaglio di ogni tassonomia risultava vuoto, senza la lista degli elementi collegati.

Tag: Orchard, AutoFac