IoC ~ Hatékony Autofac
Kétségtelen, hogy a Microsoft kedvenc IoC konténere nem az spring.net, az Unity, hanem az Autofac, hatékonysága és egyszerűsége miatt, ezért a Microsoft által vezetett gyümölcsös projektekben is használják
az Autofac használatát illusztrálja.
Mondjuk most:
A következő előadásban az Autofac alkalmazásáról fogok beszélni konkrét gyümölcsösi projektekben.
Most nézzük meg az életciklusát
1、InstancePerDependency
Hozz létre egy új egyedi példányt minden függőséghez vagy híváshoz. Ez az alapértelmezett módja az instance-ok létrehozásának is.
A hivatalos dokumentáció magyarázza: Konfiguráld be a komponenst úgy, hogy minden függő komponens vagy hívás a Resolve()-hoz egy új, egyedi példányt kapjon (alapértelmezett).
2、InstancePerLifetimeScope
Egy életciklus-tartományban minden függőség vagy hívás egyetlen közös példányt hoz létre, és minden egyes életciklus tartománynál az instance egyedi, nem megosztott.
A hivatalos dokumentáció magyarázza: Konfiguráljuk a komponenst úgy, hogy minden függő komponens vagy hívás a Resolve()-ra egyetlen ILifetimeScope-on belül ugyanaz, megosztott példányt kapjon. A függő komponensek különböző élettartamú tartományokban különböző példányokat kapnak.
3、InstancePerMatchingLifetimeScope
Egy azonosított életciklus-tartományban minden függőség vagy hívás egyetlen közös példányt hoz létre. A szülő tartományban lévő példányok megoszthatók az azonosított életciklus-tartomány gyermekidentitásos domainjében. Ha az öröklődési hierarchiában nem található azonosított életciklus-tartomány, kivételt dobunk: DependencyResolutionException.
A hivatalos dokumentáció magyarázza: Konfiguráljuk a komponenst úgy, hogy minden függő komponens vagy hívás a Resolve()-ra egy ILifetimeScope-on belül, amely bármely megadott címkével megjelölve van ugyanaz, megosztott példányszámot kapja. Az élethosszig tartó távcsövek függő komponensei, amelyek a címkézett szféra gyermekei, megosztják a szülő példányát. Ha a hierarchiában nem található megfelelően címkézett scope, akkor DependencyResolutionException kerül elő.
4、InstancePerOwned
Egy példány életciklusának életciklusában, amelyet egy életciklus tartományban birtokolt példány hoz, minden függő komponens vagy hívás a Resolve() metódushoz egyetlen közös példányt hoz, és a gyermek életciklus tartomány megosztja a példányokat a szülői életciklus tartományban. Ha az öröklődési hierarchiában nincs megfelelő életciklus-tartomány gyermekpéldányokkal, kivételt dobunk: DependencyResolutionException.
A hivatalos dokumentáció így magyarázza:
Konfiguráljuk a komponenst úgy, hogy minden függő komponens vagy hívás a Resolve()-hoz egy ILifetimeScope keretében, amelyet egy saját példány hozott létre, ugyanaz, megosztott példányt kapjon. Az élethosszig tartó távcsövek függő komponensei, amelyek a tulajdonjogú instance scope gyermekei, megosztják a szülő példányát. Ha a hierarchiában nem található megfelelő tulajdonos példány hatótávolság, akkor egy DependencyResolutionException kerül elő.
5、SingleInstance
Minden alkalommal, amikor egy komponensre támaszkodsz vagy a Resolve() metódusat hívod, ugyanazt a közös példányt kapod. Valójában ez egy egyszemélyes modell.
A hivatalos dokumentáció magyarázza: Konfiguráld a komponenst úgy, hogy minden függő komponens vagy hívás a Resolve()-hoz ugyanaz, megosztott példányt kapjon.
6、InstancePerHttpRequest
Egy Http kérés kontextusában ossza meg egy komponens példányát. Csak asp.net MVC fejlesztésre érhető el.
|