Qual è il metodo consigliato per ottenere il contenitore Autofac all'interno di una classe nell'applicazione? Autofac fornisce la risoluzione di una proprietà IContainer su una classe o devo memorizzare il contenitore globalmente dopo averlo creato?Risolvi IContainer
risposta
Avrete bisogno di IComponentContext
o ILifetimeScope
per la maggior parte degli scopi. Questi sono forniti automaticamente da Autofac, quindi tutto ciò che devi fare è prendere una dipendenza (costruttore) su uno di essi e l'istanza corrente verrà iniettata.
Entrambe le interfacce forniscono i Resolve()
operazioni standard, mentre ILifetimeScope
estende IComponentContext
aggiungendo metodi per avviare nuove vite nidificate.
componenti che desiderano utilizzare i servizi del contenitore di accedere ad altri componenti devono farlo entro il proprio ambito di applicazione, piuttosto che il 'globale' IContainer
, in modo che l'istanza corretta può essere restituito. Per esempio. all'interno di una richiesta HTTP, l'iniettato IComponentContext
o ILifetimeScope
sarà quello per la richiesta corrente.
La maggior parte dei problemi che richiedono un contesto iniettato possono essere superati (spesso in modo più elegante) utilizzando i tipi di relazione - vedere: http://autofac.readthedocs.org/en/latest/resolve/relationships.html.
- 1. Risolvi ip in hostname
- 2. Risolvi DisconnectedContext in Visual Studio
- 3. Unity Container, Risolvi singoli oggetti
- 4. Risolvi la dipendenza circolare typedef?
- 5. Risolvi sistema triangolare superiore spoglio
- 6. Risolvi * sparse * sistema triangolare superiore
- 7. ASP Web Api - IoC - Risolvi HttpRequestMessage
- 8. Risolvi errore java.lang.NoSuchMethodError: org.codehaus.groovy.ast.ModuleNode.getStarImports() Ljava/util/List;
- 9. Risolvi e TypeScript del router UI
- 10. Risolvi le funzioni matematiche PL/SQL
- 11. Risolvi l'istanza con più costruttori utilizzando l'unità
- 12. Risolvi l'inferenza dipendente con il compositore
- 13. Risolvi "CONFLICT (cancella/modifica)" in git
- 14. Risolvi IP su Nome host usando PHP
- 15. risolvi ui-router con parametri dinamici
- 16. Risolvi il nome NetBIOS su Windows 7
- 17. Risolvi la struttura dell'unione in Rust FFI
- 18. Da Matlab a Python - Funzione Risolvi
- 19. Risolvi i collegamenti simbolici con il filesystem boost
- 20. Risolvi conflitti di unione: forza sovrascrivi tutti i file
- 21. Risolvi l'handshake SSL/TLS nel browser Google Chrome
- 22. Risolvi le dipendenze ricettive della git cookbook con Berks
- 23. Risolvi entità di destinazione con più gestori di entità
- 24. Risolvi il problema delle prestazioni della cassetta di lavoro Sitecore
- 25. Dove è stata eseguita l'opzione "Risolvi" in Visual Studio 2015?
- 26. Risolvi i problemi di lettura/scrittura con NSOperationQueue?
- 27. Risolvi errori PermGen durante la creazione in IntelliJ con Maven?
- 28. Risolvi il codice PhantomJS per accedere a Instagram
- 29. Mathematica: Estrarre valore numerico quando si usa Risolvi
- 30. Risolvi più oggetti nello stato del router angularjs?
Sarebbe opportuno notare che esiste una differenza tra il cablaggio automatico di quella classe e la sua creazione mediante un delegato. Nel mio caso, ha funzionato: 'builder.RegisterType()' mentre il seguente non è riuscito con un oggetto ObjectDisposedException in fase di esecuzione una volta chiamato 'IComponentContext':' builder.Register (c => new QueryProcessor (c)) ' . –
Steven
'builder.Register (c => new QueryProcessor (c))' deve essere: 'builder.Register (c => new QueryProcessor (c.Resolve()))' - 'c' è un temporaneo che vive su base operativa. HTH! –