IoC ~ Efficiënte Autofac
Er bestaat geen twijfel dat Microsofts favoriete IoC-container niet spring.net Unity, maar Autofac is, vanwege zijn efficiëntie, vanwege zijn eenvoud, en daarom wordt het ook gebruikt voor door Microsoft geleide boomgaardprojecten
illustreert het gebruik van een Autofac.
Laten we het nu zo noemen:
In de volgende lezing zal ik het hebben over het gebruik van Autofac in specifieke projecten voor boomgaardprojecten.
Kijk nu naar de levenscyclus ervan
1、InstancePerDependency
Maak een nieuwe unieke instantie aan voor elke afhankelijkheid of aanroep. Dit is ook de standaardmanier om instanties te maken.
Officiële documentatie legt uit: Configureer de component zodat elke afhankelijke component of aanroep van Resolve() een nieuwe, unieke instantie krijgt (standaard).
2、InstancePerLifetimeScope
In een levenscyclusdomein creëert elke afhankelijkheid of aanroep één gedeelde instantie, en voor elk verschillend levenscyclusdomein is de instantie uniek en niet gedeeld.
Officiële documentatie legt uit: Configureer de component zodat elke afhankelijke component of aanroep naar Resolve() binnen één enkele ILifetimeScope dezelfde gedeelde instantie krijgt. Afhankelijke componenten in verschillende levensduurscopes krijgen verschillende instanties.
3、InstancePerMatchingLifetimeScope
In een geïdentificeerd levenscyclusdomein creëert elke afhankelijkheid of aanroep één gedeelde instantie. Instanties in het ouderdomein kunnen worden gedeeld in het kindidentiteitsdomein van het geïdentificeerde levenscyclusdomein. Als er in de gehele erfenishiërarchie geen geïdentificeerd levenscyclusdomein wordt gevonden, wordt een uitzondering gegooid: DependencyResolutionException.
Officiële documentatie legt uit: Configureer de component zodat elke afhankelijke component of aanroep naar Resolve() binnen een ILifetimeScope die met een van de gegeven tags is getagd, dezelfde gedeelde instantie krijgt. Afhankelijke componenten in lifetime scopes die kinderen zijn van de getagde scope delen de instantie van de ouder. Als er geen correct getagd scope in de hiërarchie kan worden gevonden, wordt een DependencyResolutionException gegooid.
4、InstancePerOwned
In de levenscyclus van een instantie die is aangemaakt door een instantie die in een levenscyclusdomein bezit, creëert elke afhankelijke component of aanroep naar de Resolve()-methode één gedeelde instantie, en het kindlevenscyclusdomein deelt de instanties in het ouderdomein. Als er geen geschikt levenscyclusdomein met kindinstanties wordt gevonden in de erfhiërarchie, wordt een uitzondering gegooid: DependencyResolutionException.
De officiële documentatie legt uit:
Configureer de component zo dat elke afhankelijke component of aanroep naar Resolve() binnen een ILifetimeScope die door een eigen instantie is aangemaakt, dezelfde gedeelde instantie krijgt. Afhankelijke componenten in lifetime scopes die kinderen zijn van de owned instance scope, zullen de instantie van de ouder delen. Als er geen geschikte owned instance scope in de hiërarchie kan worden gevonden, wordt een DependencyResolutionException gegooid.
5、SingleInstance
Elke keer dat je afhankelijk bent van een component of de Resolve()-methode aanroept, krijg je dezelfde gedeelde instantie. In feite is het een singleton-model.
Officiële documentatie legt uit: Configureer de component zodat elke afhankelijke component of aanroep naar Resolve() dezelfde gedeelde instantie krijgt.
6、InstancePerHttpRequest
In de context van een Http-verzoek deel je een instantie van een component. Alleen beschikbaar voor asp.net MVC-ontwikkeling.
|