English Deutsch

Einführung

Im folgenden Dokument gibt es einen kurzen Rundflug über die Benutzung von LightCore. Für die erweiterten Features bitte die Weiteren Dokumente im rechten Menü ansehen.

Kenne das Framework

Um LightCore grundlegend nutzen zu können, ist nur eine Referenz auf die LightCore.dll nötig. Daneben gibt es weitere, optionale Komponenten, die wie folgt beschrieben werden:

LightCore.dll
Kernkomponente, wird immer benötigt
LightCore.Configuration.dll
Optional, wird benötigt wenn LightCore über Xml konfiguriert werden soll
LightCore.Integration.Web.dll
Optional, bietet eine Integration für ASP.NET und ASP.NET MVC
LightCore.CommonServiceLocator.dll
Optional, stellt einen Adapter bereit, um LightCore mit dem CSL (Common Service Locator) zu nutzen

Weitere Dateien die mit ausgeliefert werden:

LightCore.xsd
Sollte der eigenen Solution / dem eigenen Projekt hinzugefügt werden, damit gibt es Intellisense für die LightCore-Konfiguration
SampleConfiguration.xml
Beispiel für eine Konfiguration einmal per .NET app- / web.config und einmal ohne.

Simples Beispiel

Mithilfe der Klasse ContainerBuilder im Namespace LightCore, können Registrierungen beim Anwendungsstart vorgenommen werden. Wird die Methode Build() darauf aufgerufen, gibt der ContainerBuilder den fertig konfigurierten Container zurück.
Am besten ist es, wenn der Container anwendungsweit gehalten wird (Application / static).

Bei der Benutzung von LightCore wird meist zuerst eine Registrierung vorgenommen und anschliessend im Programm benutzt,
indem Instanzen angefordert werden.

Folgend ein ganz einfaches Beispiel:

        
            var builder = new ContainerBuilder();
            builder.Register<IFoo, Foo>();
            
            IContainer container = builder.Build();
            IFoo foo = container.Resolve<IFoo>();
        
    

Bei der Register()-Methode wird per generischen Typparametern zuerst der Typ des Kontrakts und anschliessend der gewünschten Implementation gesetzt. Anschliessend kann per Resolve() Aufruf eine Instanz angefordert werden.

Registrierung von Abhängigkeiten

Das war nur eine mögliche Option, Abhängigkeiten zu registrieren. Es ist auch möglich zwei Type-Instanzen an die Register()-Methode zu übergeben, falls die Registrierung erst zur Laufzeit entschieden werden soll:

        
            Type typeOfContract = typeof(IFoo);
            Type typeOfImplementation = typeof(Foo);
            
            builder.Register(typeOfContract, typeOfImplementation);
        
    

Die dritte Möglichkeit - Delegates bzw. Lambda Expressions - ist flexibel und auch schnell bei der Auflösung.
Per Argument (Hier im Code c), kann auf den Container zugegriffen werden, um innere Abhängigkeiten aufzulösen. So kann eine ganze Objekthierarchie nur mit Delegates und new-Aufrufen zusammengebaut werden.

        
            builder.Register<IFoo>(c => new Foo());
            builder.Register<IFoo>(c => new Foo(c.Resolve<IBar>()));
            builder.Register<IFoo>(c => FooFactory.GetFoo());
        
    

Zusätzlich ist es möglich, Abhängigkeiten über Xml zu konfigurieren, mehr dazu hier.

Falls dies noch nicht reicht, kann per eigener Implementation der abstrakten Klasse RegistrationModule eine eigene Logik bereitstellen, die von irgendwo her und auf irgendeine Art Abhängigkeiten registriert.