IoC ~ Autofac eficient
Nu există nicio îndoială că containerul preferat al Microsoft pentru IoC nu este spring.net, Unity, ci Autofac, datorită eficienței sale, a simplității sale, așa că este folosit și pentru proiecte de livadă conduse de Microsoft
ilustrează utilizarea unui Autofac.
Să spunem acum:
În următoarea prelegere, voi vorbi despre utilizarea Autofac în proiecte specifice pentru proiectele de livadă.
Acum uită-te la ciclul său de viață
1、InstantPerDependency
Creează o nouă instanță unică pentru fiecare dependență sau apel. Aceasta este și metoda implicită de a crea instanțe.
Documentația oficială explică: Configurați componenta astfel încât fiecare componentă dependentă sau apel către Resolve() să primească o instanță nouă, unică (implicit).
2、InstancePerLifetimeScope
Într-un domeniu de ciclu de viață, fiecare dependență sau apel creează o singură instanță partajată, iar pentru fiecare domeniu diferit de ciclu de viață, instanța este unică și nu este partajată.
Documentația oficială explică: Configurați componenta astfel încât fiecare componentă dependentă sau apel către Resolve() dintr-un singur ILifetimeScope să primească aceeași instanță partajată. Componentele dependente din diferite domenii de viață vor primi instanțe diferite.
3、InstancePerMatchingLifetimeScope
Într-un domeniu de ciclu de viață identificat, fiecare dependență sau apel creează o singură instanță partajată. Instanțele din domeniul părinte pot fi partajate în domeniul identității copilului al domeniului de ciclu de viață identificat. Dacă nu se găsește niciun domeniu identificat al ciclului de viață în întreaga ierarhie a moștenirii, se aruncă o excepție: DependencyResolutionException.
Documentația oficială explică: Configurați componenta astfel încât fiecare componentă dependentă sau apel către Resolve() dintr-un ILifetimeScope etichetat cu oricare dintre valorile etichetei furnizate să primească aceeași instanță partajată. Componentele dependente din domeniile pe viață care sunt copii ale scopului etichetat vor împărți instanța părintelui. Dacă nu se găsește un scop etichetat corespunzător în ierarhie, se aruncă o excepție DependencyResolution.
4、InstancePerOwned
În ciclul de viață al unei instanțe create de o instanță deținută într-un domeniu de ciclu de viață, fiecare componentă dependentă sau apel la metoda Resolve() creează o singură instanță partajată, iar domeniul copilului de ciclu de viață împarte instanțele din domeniul părintelui ciclului de viață. Dacă nu se găsește un domeniu adecvat al ciclului de viață cu instanțe copil în ierarhia de moștenire, se aruncă o excepție: DependencyResolutionException.
Documentația oficială explică:
Configurați componenta astfel încât fiecare componentă dependentă sau apel către Resolve() din cadrul unui ILifetimeScope creat de o instanță deținută să primească aceeași instanță partajată. Componentele dependente din scopurile pe durata vieții care sunt copii ale scopului instanței deținute vor împărți instanța părintelui. Dacă nu se găsește un scop de instanță deținut adecvat în ierarhie, se aruncă o excepție DependencyResolution.
5、Instanță Unică
De fiecare dată când depinzi de o componentă sau apelezi metoda Resolve(), primești aceeași instanță partajată. De fapt, este un model singleton.
Documentația oficială explică: Configurați componenta astfel încât fiecare componentă dependentă sau apel către Resolve() să primească aceeași instanță partajată.
6、InstancePerHttpRequest
În contextul unei cereri Http, partajează o instanță a unui component. Disponibil doar pentru dezvoltare asp.net MVC.
|