Activation Behaviors in Ninject

Weiter geht’s im Ninject Dojo!

Wie auch bei Spring.NET kann man bei Ninject definieren wie der Aktivierungsprozess abläuft und wie sich Ninject beim Injecten verhält.

Ninject bringt vier Activation Behaviors out-of-the-box mit

  1. TransientBehavior
  2. SingletonBehavior
  3. OnePerThreadBehavior
  4. OnePerRequestBehavior

TransientBehavior

Bei der Verwendung des TransientBehaviors erstellt Ninject bei jeder Anfrage eine neuen Instanz des gewählten Types.

SingletonBehavior

Ninject erstellt nur eine Instanz des besagten Typens und gibt diese immer wieder zurück.

OnePerThreadBehavior

Ninject erstellt pro Thread (System.Threading.Thread :) ) eine neue Instanz des Types.

OnePerRequestBehavior

Das OnePerRequestBehavior zielt auf die Web-Entwicklung hierbei wird eine Instanz beim HttpRequest erstellt, diese Instanz wird solange zurückgegeben bis der HttpRequest beendet ist.

 

Die Anwendung von ActivationBehaviors

Per default verwendet Ninject das TransientBehavior, welches wie bereits gesagt immer eine neue Instanz des gewählten Typs zurückliefert.

Um ein alternatives Behavior zu verwenden muss lediglich das MappingModule von Ninject mit Hilfe der Using-Methode erweitert werden, der Anwendungscode bleibt hiervon unberührt.

Die Ninject Behaviors befinden sich im Namespace Ninject.Core.Behavior, welcher sich in der Ninject.Core.dll befindet.

Das im vorherigen Ninject-Post erstellte MyTagMappingModule kann man also ganz einfach erweitern, so dass immer eine Singleton Instanz von IMediaDevice an alle Customer gebunden wird.

public class MyTagMappingModule : StandardModule
{
    public override void Load()
    {
        Bind<IMediaDevice>().To<IPhone>();
 
       #region SingletonBehavior
        Bind<IMediaDevice>().To<WindowsPhone>().
            Only(When.Context.Target.Tag == "Productive").
            Using<SingletonBehavior>();
       #endregion
 
        Bind<IAddress>().To<InternationalAddress>();
        Bind<IAddress>().To<NationalAddress>().
            Only(When.Context.Target.Tag == "Productive");
    }
}

 

Um das ganze Verhalten zu testen, habe ich nun einfach noch eine Konsolenausgabe in den Konstruktor der WindowsPhone Klasse hinzugefügt.

ninject_singleton Zeile 1: Die Konstruktor Ausgabe der WindowsPhone Klasse

 

Wie Abbildung 1 zeigt, wird der Konstruktor der WindowsPhone Klasse nur einmal aufgerufen, auch wenn 2 Customer Instanzen erstellt werden.

 

Viel Spass beim Injecten

 

Technorati-Tags: ,,
DotNetKicks-DE Image
Published Dienstag, 26. Januar 2010 12:09 von ThorstenHans
Abgelegt unter: ,

Kommentare

# Twitter Trackbacks for Activation Behaviors in Ninject - .NET rocks [dotnet-forum.de] on Topsy.com

Ping Antwort von  Twitter Trackbacks for                 Activation Behaviors in Ninject - .NET rocks         [dotnet-forum.de]        on Topsy.com

# Activation Behaviors in Ninject

Mittwoch, 27. Januar 2010 10:55 von dotnet-kicks.de

Sie wurden gekickt (eine gute Sache) - Trackback von dotnet-kicks.de

# Dependency Injection mit Ninject

Montag, 15. Februar 2010 08:32 von .NET rocks

Ninject ist ein kleines und doch sehr mächtiges Framework, in einer kurzen Blog Serie zeige ich wie man

Kommentar abgeben

(verpflichtend) 
(verpflichtend) 
(optional)
(verpflichtend)