Προγραμματισμός

Εργασία με το Unity Application Block

Παρόμοια με το Castle Windsor και το StructureMap, το Unity Application Block είναι επίσης ένα κοντέινερ IoC (Inversion of Control). Το Unity Application Block από τη Microsoft είναι ένα ελαφρύ επεκτάσιμο δοχείο έγχυσης εξάρτησης. Παρέχει υποστήριξη για ένεση κατασκευαστή, ένεση ιδιοτήτων και επίσης μέθοδο ένεσης κλήσης. Παρεμπιπτόντως, το Unity Application Block εισήχθη ως μέρος της Enterprise Library.

Σε περίπτωση που δεν είστε εξοικειωμένοι με το τι εξαρτάται η Έγχυση Εξάρτησης και η Αντιστροφή του Ελέγχου, ακολουθεί μια γρήγορη εξήγηση. Το Dependency Injection είναι η πραγματοποίηση της αρχής του IoC. Τόσο η αντιστροφή του ελέγχου όσο και η έγχυση εξάρτησης είναι τρόποι που σας επιτρέπουν να σπάσετε τις εξαρτήσεις μεταξύ των στοιχείων της εφαρμογής σας. Η αρχή Dependency Injection δηλώνει ότι οι ενότητες υψηλού επιπέδου σε μια εφαρμογή δεν πρέπει να εξαρτώνται από τις ενότητες χαμηλού επιπέδου. μάλλον, και τα δύο πρέπει να εξαρτώνται από τις αφαιρέσεις.

Στόχοι σχεδιασμού Unity Application Block

Το Unity Application Block είναι ένα κοντέινερ Dependency Injection (DI). Σημειώστε ότι το Unity Application Block δεν έχει καμία εξάρτηση από το σύστημα διαμόρφωσης Enterprise Library. Ως εκ τούτου, μπορείτε να το χρησιμοποιήσετε ως αυτόνομο δοχείο έγχυσης εξάρτησης χωρίς να εγκατασταθεί η Βιβλιοθήκη Επιχειρήσεων στο σύστημά σας. Οι σχεδιαστικοί στόχοι του Unity Application Block περιλαμβάνουν τα ακόλουθα:

  1. Προώθηση ενός αρθρωτού σχεδιασμού μέσω της αποσύνδεσης
  2. Παρέχοντας ένα γρήγορο, επεκτάσιμο, ελαφρύ δοχείο έγχυσης εξάρτησης
  3. Παρέχετε υποστήριξη για επεκτασιμότητα μέσω επεκτάσεων
  4. Παρέχετε υποστήριξη για έγχυση βάσει χαρακτηριστικών
  5. Παρέχετε υποστήριξη για ένα διαισθητικό API για σύνδεση και εργασία με το δοχείο έγχυσης εξάρτησης

Ξεκινώντας

Σε αυτήν την ενότητα θα διερευνήσουμε πώς μπορούμε να ξεκινήσουμε να χρησιμοποιούμε το Unity Application Block στις εφαρμογές μας. Το πρώτο βήμα πρέπει να είναι να εγκαταστήσετε το Unity Application Block στο σύστημά σας. Ο ευκολότερος τρόπος για να εγκαταστήσετε αυτήν τη βιβλιοθήκη είναι μέσω του NuGet. Για τους σκοπούς αυτής της απεικόνισης θα χρησιμοποιήσουμε ένα έργο εφαρμογής κονσόλας εδώ. Για να δημιουργήσετε την πρώτη εφαρμογή χρησιμοποιώντας το Unity Application Block, ακολουθήστε τα εξής βήματα:

  1. Ανοίξτε το Visual Studio IDE
  2. Δημιουργήστε ένα έργο κονσόλας και αποθηκεύστε το με ένα όνομα
  3. Κάντε δεξί κλικ στο έργο στο παράθυρο Solution Explorer
  4. Επιλέξτε "Διαχείριση πακέτων NuGet ..."
  5. Εγκαταστήστε το Unity NuGet Package Manager

Αυτό είναι το μόνο που πρέπει να κάνετε για να ξεκινήσετε τη χρήση του Unity. Τώρα είστε έτοιμοι να χρησιμοποιήσετε το Unity Application Block στο έργο σας.

Δημιουργία και επίλυση εξαρτήσεων αντικειμένων χρησιμοποιώντας το Unity container

Μπορείτε να χρησιμοποιήσετε το κοντέινερ Unity για να επιλύσετε εύκολα εξαρτήσεις σε ένα συγκεκριμένο αντικείμενο, όπως φαίνεται στο απόσπασμα κώδικα που ακολουθεί.

IUnityContainer container = νέο UnityContainer ();

container.RegisterType ();

container.RegisterType ();

Όταν καταχωρίζετε τον τύπο ενός αντικειμένου στο κοντέινερ Unity, μπορείτε να καθορίσετε τη διάρκεια ζωής. Εάν δεν καθορίσετε κανένα, χρησιμοποιείται η προεπιλεγμένη διάρκεια ζωής. Ένας διαχειριστής διάρκειας ζωής ελέγχει τη διάρκεια ζωής ενός καταχωρημένου αντικειμένου. Οι τύποι των διαχειριστών διάρκειας ζωής που υποστηρίζονται από το Unity Application Block περιλαμβάνουν: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager και ExternalallyControlledLifetimeManager.

Εξετάστε την ακόλουθη διεπαφή που ονομάζεται ILogger.

δημόσια διεπαφή ILogger

   {

συμβολοσειρά GetLogTypeName ();

   }

Η διεπαφή ILogger περιέχει τη δήλωση μιας μεθόδου που ονομάζεται, GetLogTypeName (). Οι κλάσεις FileLoger, DatabaseLogger και EventLogger (δίνονται παρακάτω) εφαρμόζουν τη διεπαφή ILogger.

δημόσια τάξη FileLogger: ILogger

   {

δημόσια συμβολοσειρά GetLogTypeName ()

       {

επιστρέψτε "Αρχείο καταγραφής αρχείων";

       }

   }

Δημόσια τάξη DatabaseLogger: ILogger

   {

δημόσια συμβολοσειρά GetLogTypeName ()

       {

επιστρέψτε "Database Logger";

       }

   }

δημόσια τάξη EventLogger: ILogger

   {

δημόσια συμβολοσειρά GetLogTypeName ()

       {

επιστρέψτε "Event Logger";

       }

   }

Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να επιλύσετε εξαρτήσεις χρησιμοποιώντας το UnityContainer.

static void Main (συμβολοσειρά [] args)

{

IUnityContainer container = νέο UnityContainer ();

container.RegisterType ();

ILogger iLogger = container.Resolve ();

string logType = iLogger.GetLogTypeName ();

Console.WriteLine (logType);

Κονσόλα. Διαβάστε ();

}

Σημειώστε ότι το "Container" στο Unity Application Block είναι το αντικείμενο που μπορεί να χρησιμοποιηθεί για τη δημιουργία και την έγχυση εξαρτήσεων. Μπορείτε να καταχωρίσετε τύπους ή αντιστοιχίσεις τύπων με το κοντέινερ Unity χρησιμοποιώντας τη μέθοδο RegisterType. Η μέθοδος Resolve () χρησιμοποιείται για την επιστροφή συγκεκριμένης παρουσίας του τύπου που είναι καταχωρημένος για τον γενικό τύπο που αναφέρεται χρησιμοποιώντας το T. Στο παράδειγμα κώδικα που δίνεται παραπάνω, η μέθοδος Resolve () θα επιστρέψει μια παρουσία της κλάσης FileLogger.

Μια εναλλακτική προσέγγιση για τον προσδιορισμό της ενοποίησης Unity είναι μέσω της διαμόρφωσης. Υποθέτοντας ότι έχετε καθορίσει ένα κοντέινερ με το όνομα Container στη διαμόρφωση Unity, το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να καλέσετε τη μέθοδο LoadConfiguration στην παρουσία κοντέινερ στον κώδικά σας.

string containerName = "Κοντέινερ";

IUnityContainer container = νέο UnityContainer (). LoadConfiguration (containerName);