Blog
Blog HelionBlog HelionBlog HelionBlog Helion
  • Artykuły
  • Autorzy
  • Recenzje
  • Konkursy

Ninject — ciekawa alternatywa dla Autofaca

    Blog.helion.pl Artykuły Ninject — ciekawa alternatywa dla Autofaca
    NastępnyPoprzedni

    Ninject — ciekawa alternatywa dla Autofaca

    By Jerzy Piechowiak | Artykuły, Programowanie | Brak komentarzy | 20 kwietnia, 2017 | 10

    W poprzednim poście starałem się przedstawić podstawowe różnice między trzema głównymi sposobami rejestracji usług dostępnymi w Autofacu. Kontener ten oferuje szerokie możliwości, dobre czasy „wyciągania” usług, ma także grono wiernych użytkowników. Jednak jeśli spojrzymy na statystyki pobrań paczek nugetowych na stronie nuget.org, to szybko się przekonamy, że nie jest to najpopularniejszy kontener IoC, a większym zainteresowaniem cieszy się choćby Unity czy tytułowy Ninject. I właśnie temu ostatniemu chcę się przyjrzeć bliżej w dzisiejszym wpisie.

    Ninject

    Ninject, podobnie jak Autofac, jest rozwijany jako open source, dzięki czemu uzyskujemy łatwy dostęp do kodu źródłowego tego kontenera. Aby skorzystać z tej biblioteki, wystarczy zainstalować paczkę nugetową. Można również skorzystać z gotowych rozwiązań przygotowanych pod konkretne wdrożenia. Mamy tutaj choćby dedykowane paczki do MVC czy WCF. Szerszą dokumentację można znaleźć na stronie wiki na Githubie.

     

    Jak zacząć? 

    Po zainstalowaniu paczki nugetowej możemy rozpocząć tworzenie pierwszej aplikacji wykorzystującej kontener IoC. Dla kontrastu z Autofacem wykorzystam interfejsy i klasy napisane w poprzednim poście. Poniżej kod:

     

    public interface IOutput
    {
    	void Write(string content);
    }
    public class ConsoleOutput : IOutput
    {
    	public void Write(string content)
    	{
    		Console.WriteLine(content);
    	}
    }
    public interface IDateWriter
    {
    	void WriteData();
    }
    public class TodayWriter : IDateWriter
    {
    	private readonly IOutput _output;
    	private int counter = 0;
    	public TodayWriter(IOutput output)
    	{
    		this._output = output;
    	}
    	public void WriteData()
    	{
    		++counter;
    		this._output.Write(DateTime.Today.ToShortDateString());
    		this._output.Write($"{this.GetHashCode()}_{counter}");
    	}
    }
    

     

    Przygotujemy teraz klasę Program, która standardowo jest sercem każdej aplikacji konsolowej. Do rejestracji usług Ninject wykorzystuje tzw. kernele. To właśnie za ich pomocą decydujemy, czy klasa ma być zarejestrowana jako singleton, czy też dla każdego żądania powinniśmy dostawać nowy egzemplarz (zachowanie domyślne). W skrócie jest to więc podejście bardzo podobne do Autofaca, z tym że wykorzystujemy tutaj inne klasy. W Ninject funkcjonuje również Scope, aczkolwiek w trochę inny sposób niż w konkurencyjnym rozwiązaniu.

     

    Poniżej klasa Program:

     

    
    class Program
    {
    	static void Main(string[] args)
    	{
    		IKernel kernel = new StandardKernel();
    		RegisterServices(kernel);
    		WriteData(kernel);
    		Console.ReadKey();
    	}
    	public static void WriteData(IKernel kernel)
    	{
    		var writer = kernel.Get<IDateWriter>();
    		writer.WriteData();
    		var anotherWriter = kernel.Get<IDateWriter>();
    		anotherWriter.WriteData();
    	}
    	private static void RegisterServices(IKernel kernel)
    	{
    		kernel.Bind<IOutput>().To<ConsoleOutput>();
    		kernel.Bind<IDateWriter>().To<TodayWriter>();
    	}
    }
    

     

    Rezultat wywołania naszego programu wygląda następująco:

     

    25.10.2016

    62910583_1

    25.10.2016

    56230589_1

     

    Sprawdźmy również, co się stanie, jeśli przerobimy metodę RegisterServices w taki sposób, by rejestrowała usługi jako singleton. Poniżej kod:

     

    private static void RegisterServices(IKernel kernel)
    {
    	kernel.Bind<IOutput>().To<ConsoleOutput>().InSingletonScope();
    	kernel.Bind<IDateWriter>().To<TodayWriter>().InSingletonScope();
    }
    

     

    Poniżej rezultat zmodyfikowanej metody:

     

    25.10.2016

    60684095_1

    25.10.2016

    60684095_2

     

    Zgodnie z oczekiwaniami mamy do czynienia z tym samym obiektem.

    Ninject jest bardzo prosty w użytkowaniu, istnieje sporo publikacji na ten temat i można liczyć na wsparcie w sieci. Niestety, nie jest to najszybszy kontener IoC. Więcej, powiedziałbym, że jest dość wolny, o czym wspomina się w licznych postach na blogach, m.in. w tym. Warto więc wybrać mądrze.

     

     

    Jerzy Piechowiak

    Altcontroldelete.pl

     


     

     Szukasz informacji o C#? Kliknij TU lub zerknij poniżej:

               

     

    autofac, c#, Jerzy Piechowiak, kontener, Ninject, programowanie
    Avatar

    Jerzy Piechowiak

    Więcej postów od Jerzy Piechowiak

    Podobne posty

    • Autofac — różne sposoby rejestracji usług

      By Jerzy Piechowiak | 2 komentarze

      Gdy dobrych kilka lat temu zaczynałem programować w C#, nie miałem pojęcia o czymś takim jak kontener IoC. Każdy obiekt tworzyłem klasycznie — poprzez zastosowanie słowa kluczowego new: StringBuilder sb = new StringBuilder();

    • C# — poprawna implementacja interfejsu IDisposable

      By Jerzy Piechowiak | 1 komentarz

      C# jest językiem wysokiego poziomu, w którym przygotowano liczne gotowe komponenty i usprawnienia, jakich nie znajdziemy u konkurencji. Takie podejście ma sporo zalet, ponieważ nie musimy przejmować się wieloma rzeczami, które w innych językach musielibyśmyCzytaj więcej…

    • Wzorzec projektowy adapter

      By Jerzy Piechowiak | Brak komentarzy

      Bardzo trudno jest napisać fragment kodu, o którym moglibyśmy powiedzieć, że jest idealny. Praktycznie niemożliwe jest zrobienie takiej rzeczy za pierwszym razem.

    • Wzorzec projektowy — metoda wytwórcza

      By Jerzy Piechowiak | Brak komentarzy

      Czasem mówi się, że wzorce projektowe uzupełniają braki techniczne w językach programowania. Jeśli spojrzymy na kilka popularnych wzorców, to szybko dostrzeżemy schemat. Wiele z nich krąży wokół szeroko rozumianego polimorfizmu.

    • Wzorzec projektowy singleton

      By Jerzy Piechowiak | Brak komentarzy

      Ze wzorcami projektowymi bywa różnie. Niektóre są bardzo przydatne, inne mniej, a jeszcze inne są pożądane tylko w określonych sytuacjach. Ogólnie bardzo łatwo wpaść w pułapkę nadużycia określonych rozwiązań. Taka sytuacja ma często miejsce wCzytaj więcej…

    NastępnyPoprzedni

    Znajdź post

    Bądźmy w kontakcie

    Książka dnia

    Algorytmy, struktury danych i techniki programowania dla programistów Java

    Autor: Piotr Wróblewski

    Cena: 33.50 zł 67.00 zł
    (Cena e-booka: zł zł)

    O 33,5zł taniej!

    kup teraz

    Ostatnie wpisy

    • Błyskawiczny kurs pisania skryptów powłoki
    • Przykładowa aplikacja webowa zaimplementowana w ASP .NET Core
    • Wprowadzenie do .NET Core: instalacja, konfiguracja, pierwsza aplikacja w systemie Linux
    • Grupa Helion zaprasza na szkolenia stacjonarne!
    • Hello World! Czym jest programowanie?

    Tagi

    .net agile altcontroldelete asp.net c# czysty kod debugowanie design patterns e-biznes emarketing Google Google Analytics hacking Jerzy Piechowiak kod kodowanie Krzysztof Marzec książka Maciej Dutko magazyn programista Magdalena Daniłoś marketing MVVM onepress organizacja czasu praca prograista programista programowanie prokrastynacja rafał kocisz reklama rozwój software craftsman SOLID startup techniki programowania testowanie video marketing visual studio WPF wzorce projektowe youtube zarządzanie czasem zarządzanie projektami

    Archiwum

    • lipiec 2017
    • czerwiec 2017
    • maj 2017
    • kwiecień 2017
    • marzec 2017
    • luty 2017
    • styczeń 2017
    • grudzień 2016
    • listopad 2016
    • październik 2016
    • wrzesień 2016
    • lipiec 2016
    • czerwiec 2016
    Blog wydawnictwa
    Informatyka w najlepszym wydaniu
    Strona wydawcy:
    www.helion.pl
    Księgarnia Helion.pl
    Nowości
    Bestsellery
    Promocje
    Bądźmy w kontakcie:
    Chcesz zostać autorem?
    Masz pytania do redakcji?
    Napisz do nas »
    • Artykuły
    • Autorzy
    • Recenzje
    • Konkursy
    Blog Helion