|
|
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:{"error_msg": "Certificazione IAM fallita"}
|