Nel nuovo ASP.NET Core, un gran numero di iniezioni di dipendenza viene utilizzato per scrivere codice.
Ad esempio, nella nostra classe Startup, possiamo vedere quanto segue:
AddMvc AddDbContext include l'AddDirectoryBrowser che utilizzavamo per i tour delle directory precedenti:
Sono tutti framework che forniscono buoni servizi, e possiamo usarli direttamente inserendoli.
L'inversione di controllo (IoC) è un principio di progettazione nella programmazione orientata agli oggetti che può essere utilizzato per ridurre l'accoppiamento tra il codice informatico. Il metodo più comune è chiamato Pendency Injection (DI), e esiste anche un metodo chiamato "Dependency Lookup". Controllando l'inversione, quando un oggetto viene creato, un'entità esterna che controlla tutti gli oggetti nel sistema gli passa un riferimento all'oggetto da cui dipende. Si può anche dire che le dipendenze vengono iniettate nell'oggetto. Per usare l'ioc, la classe Startup deve fare riferimento a Microsoft.Extensions.DependencyInjection(ps), che è già piuttosto semplice: Microsoft... Espandi... Iniezione di dipendenza - - ,)
Inietta il ciclo di vita di un servizio
Microsoft offre 3 cicli di vita per i servizi auto-iniettati.
Transitorio
Un servizio istantaneo del ciclo di vita che viene creato ogni volta che viene richiesto. Questo ciclo di vita è più adatto a servizi leggeri e senza stato.
Ambito
Nello stesso ambito, il servizio viene creato una sola volta per richiesta.
Singleton (Solo)
Il globale viene creato solo una volta, la prima volta che viene richiesto, e poi viene sempre utilizzato.
Come si utilizzano questi tre cicli di vita? Possiamo usare metodi diversi direttamente durante l'iniezione, il codice è il seguente:
Testiamo la generazione specifica di questi tre cicli di vita
Scriviamo tre interfacce con nomi diversi e 3 classi diverse per implementare le interfacce, come segue:
Nel costruttore di ogni classe di implementazione, generiamo un nuovo GUID, che ci permette di determinare se la classe ha rieseguito il costruttore.
Inietta i servizi nel controller
Generalmente esistono tre modi di iniezione: iniezione costruttiva, iniezione metodografica e iniezione attributo. Il container IOC di Microsoft utilizza di default l'iniezione di costruttori (L'iniezione di attributi non è supportata, ma può essere ottenuto con la sostituzione di un contenitore di terze parti)
Visualizza codice pagina:
Esegui il progetto e accedi tramite 2 browser diversi, come mostrato di seguito:
Abbiamo riscontrato che i GUID generati due volte nel ciclo di vita istantaneo sono incoerenti, indicando che l'oggetto non è lo stesso.
Tuttavia, il ciclo di vita dell'ambito è lo stesso, perché con lo stesso ambito, il GUID del servizio usato due volte nello stesso browser è lo stesso, indicando che viene utilizzato lo stesso oggetto.
Nel caso di un singleton, due browser diversi accedono sempre allo stesso GUID, indicando che lo stesso oggetto viene chiamato.
(Fine)
|