Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20252|Risposta: 1

[Fonte] L'ambito dell'istanza del componente autofac

[Copiato link]
Pubblicato su 14/09/2018 13:22:21 | | | |
L'ambito dell'istanza determina come i servizi vengono condivisi tra le richieste.

Indirizzo originale:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

Un'istanza per ogni dipendenza

Con questa opzione, una nuova istanza viene restituita ogni volta che il servizio viene richiesto. Usa InstancePerDependency(). Questa è l'opzione predefinita. Il codice sottostante, le righe 2 e 3, è equivalente.

Il codice seguente genera una nuova istanza per ogni ciclo, per un totale di 100 istanze.

Istanza singola

Usa questa opzione per richiedere un servizio sia nell'ambito root che in quello annidato, entrambi restituendo la stessa istanza. Usa SingleInstance() per specificare.


Il codice sottostante, w1 e w2 sono sempre lo stesso oggetto, e c'è solo un'istanza della classe Worker in 100 cicli.


Un'istanza per ambito del ciclo di vita

Usa questa opzione per richiedere un servizio in uno specifico ILifetimeScope, restituendo solo un'istanza. Usa InstancePerLifetimeScope(). Nel codice seguente, i 100 volte w1 nello scopo1 sono lo stesso oggetto, e i 100 volte w2 nell'ambito2 sono lo stesso oggetto, ma w1 e w2 non sono lo stesso oggetto.


Un'istanza per ogni intervallo di ciclo di vita corrispondente

Simile a [un'istanza per ambito di ciclo di vita] sopra, ma con più controllo. Usa questa opzione per permettere che l'oggetto ILifetimeScope venga fornito con un Tag. C'è solo un'istanza nell'intervallo del match a coppia. Usa il metodo InstancePerMatchingLifetimeScope().

Nel codice sottostante, w1 e w2 sono la stessa cosa, w3 e w4 sono la stessa cosa, ma w1 e w3 sono diversi.

Il markup appropriato deve essere fornito durante l'analisi analizzante, e il codice seguente lancia un'eccezione.

Un'istanza per richiesta

Alcune applicazioni hanno naturalmente semantica Request, come ASP.NET MVC o applicazioni WebForm. [Un'istanza per richiesta] è implementata sulla base di [un'istanza per ogni intervallo di ciclo di vita corrispondente], fornendo marcatori di scopo, funzioni di registrazione e integrazione di tipi comuni. In sostanza, [un'istanza per ogni intervallo di ciclo di vita abbinato].

ASP.NET Core utilizza un'istanza per ambito di ciclo di vita invece di un'istanza per richiesta.

Un'istanza per ogni Posseduto

Il<T> tipo di associazione implicita Posseduto crea intervalli di ciclo di vita annidati. Con la registrazione istanza per proprietà, puoi limitare le dipendenze alle istanze possedute.

In questo caso, il servizio ServiceForHandler è limitato all'ambito dell'istanza MessageController.


Gamma di filettature

Autofac può costringere gli oggetti del thread A a non soddisfare le dipendenze del thread B.

Poi lasciamo che ognuno crei il proprio ambito di vita

Importante: in uno scenario multithread, fai attenzione a non pulire il telescopio genitore.Altrimenti, i subscope nel thread derivato non saranno in grado di risolvere il servizio.

Ogni thread avrà la propria istanza di MyThreadScopedComponent, che è essenzialmente un singleton con ambito di ciclo di vita. Le istanze nello scope non sono fornite esternamente, quindi è facile mantenere i componenti isolati tra i thread.

Aggiungendo il parametro ILifetimeScope, l'intervallo genitore può essere iniettato nel codice che genera il thread, e Autofac inietta automaticamente l'intervallo corrente, che può poi essere utilizzato per creare scope annidati.

Se vuoi controllarlo ulteriormente, puoi usare [un'istanza per ogni intervallo di ciclo di vita corrispondente] per associare componenti thread-scoped a scope interni del ciclo di vita, come mostrato nella figura:



Il "Contesto" nel diagramma è l'intervallo del ciclo di vita creato dal metodo BeginLifetimeScope.





Precedente:Effetti del clic del mouse nel front-end: libertà, democrazia, prosperità
Prossimo:{&quot;error_msg&quot;: &quot;Certificazione IAM fallita&quot;}
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com