Injizieren

Schnelle Python-Abhängigkeitsinjektion
Jetzt downloaden

Injizieren Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • MIT/X Consortium Lic...
  • Preis:
  • FREE
  • Name des Herausgebers:
  • Ivan Korobkov
  • Website des Verlags:
  • http://code.google.com/u/Ivan.Korobkov/

Injizieren Stichworte


Injizieren Beschreibung

Schnelle Python-Abhängigkeitseinspritzung Inject ist eine schnelle Python-Abhängigkeitseinspritzbibliothek. Es verwendet Dekoratoren und Deskriptoren, um externe Abhängigkeiten und SCOPES (Guice-inspiriert) zu referenzieren, um Angabe der Wiederverwendung von Objekten anzugeben. Abhängigkeiten können von Typen und optionalen Anmerkungen referenziert werden. Es ist keine Konfiguration erforderlich, aber eine fortschrittliche In-Code-Konfiguration ist möglich. Die meisten anderen Python-Abhängigkeitsinjektionswerkzeuge wie Pycontainer oder Spring Python sind Ports aus anderen Sprachen (Java). Sie basieren also auf abhängigen Injektionswege, die für statisch typisierte Sprachen spezifisch sind, die von Martin Fowler.Python beschrieben werden, ist nicht Java. Muster und Programmiertechniken, die in einer Sprache ordnungsgemäß und verwendbar erscheinen, können in einem anderen umständlich sein. Inject wurde erstellt, um ein _PYTHONIC_-Weg der Abhängigkeitsinjektion bereitzustellen, wobei die spezifische Python-Funktionalität verwendet wird. Die in Injektion verwendete Terminologie wurde absichtlich mit der Guice ähnlich gemacht. Die interne Architektur ist jedoch unterschiedlich config = inject.attr ('config', config) a = inject.attr ('a', a) @ Inject.param ('B', B): def __init __ (Self, B): self.b = bc = C () Hier sind einige wichtige Funktionen von "Inject": · Schnell, nur 2-3 mal langsamer als direkte Instantiierung. · Normale Art, Objekte, Klasse (* args, ** kwargs) zu instantieren. · Injizieren von Argumenten in Funktionen und Methoden. · Referenzieren von Abhängigkeiten nach Typen und optionalen Anmerkungen. · Bindung an Callables, Instanzen und ungebundene Methoden (siehe Aufrufe). · Anforderung von Scope Middleware für WSGI- und DJANGO-Anwendungen (erfordert Python2.5 +). · Überhaupt keine Konfiguration erforderlich. Fortgeschrittene flexible Konfiguration möglich: · Injektor.Bind (Klasse, zu = Klasse2) · Injector.bind (Datenbank, Anmerkungen = 'Benutzer', TO = UserDatabase, Scope = AppScope) · Injector.bind ('app_started_at', zu = dateTime.now ()) · Injector.Bind ('einige_var', to = class.unbound_method) Zwei Injektionsmethoden, ein Deskriptor und ein Dekorateur: Klasse mein (Objekt): · Att = inject.attr ('attr', class2) @ Inject.param ('param', class2): def myfunc (param): · bestehen Unterstützung für das Erbschaft durch Übergeben von Inject.super als Standard-KWARG-Wert: Klasse mein (Objekt): · @ Inject.param ('param1', class1) def __init __ (self, param1): · Self.param1 = param1 Klasse My2 (mein): · @ Inject.param ('param2', class2) def __init __ (self, param2, param1 = inject.super): · Super (MY2, SELBST) .__ INIT __ (Param1 = Param1) · Self.param2 = param2 Aufrufe, um ungebundene Methoden anzurufen (cool für Zuhörer): Klasse mein (Objekt): def Get_Data (Self): · bestehen · Erstellen Sie einen Invoker, der eine ungebundene Methode aufruft. · Invoker = Inject.invoker (my.get_data) · Daten = Invoker () · Direkt an eine ungebundene Methode binden. · @ Inject.param ('Daten', my.get_data) def Func (Daten): · bestehen · Teilinjektionen, wenn nur einige Argumente injiziert werden. · @ Inject.param ('Logger', Logger) Def Mylog (Msg, Logger): · bestehen · Mylog ('meine Nachricht') · Scopes: Anwendung (Singleton), Anfrage, Noskop. Klassencontroller (Objekt): · Session = Inject.attr ('Session', Session, Scope = ReqScope) · Oder in der Konfiguration · Injector.bind (Session, TO = Session, Scope = ReqScope) · Oder setzen Sie den Standardbereich ein · @Reqscope. Klasse-Sitzung (Objekt): · bestehen · @Appscope. Klasse DatabasePool (Objekt): · bestehen · Einfache Integration in bestehende Projekte. Anforderungen: · Python


Injizieren Zugehörige Software