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

Πώς να εφαρμόσετε το DI στο WebAPI χρησιμοποιώντας το NInject

Το Dependency injection είναι ένα μοτίβο σχεδιασμού λογισμικού που σας βοηθά να δημιουργήσετε ενσωματωμένες εφαρμογές στην εφαρμογή σας χρησιμοποιώντας χαλαρά συνδεδεμένα, δοκιμαστικά στοιχεία. Εξαλείφει τις σκληρές κωδικοποιήσεις εξαρτήσεων μεταξύ των τύπων και διευκολύνει την κατασκευή, τη δοκιμή και τη συντήρηση των τύπων σας με την πάροδο του χρόνου. Το μοτίβο σχεδίασης IOC (Inversion of Control) δηλώνει ότι τα αντικείμενα δεν πρέπει να δημιουργούν αντικείμενα από τα οποία εξαρτώνται για να εκτελέσουν κάποια δραστηριότητα.

Έχετε πολλά εμπορευματοκιβώτια IOC που σας βοηθούν στην αυτόματη εγκατάσταση και διαχείριση κύκλου ζωής των αντικειμένων. Σημειώστε ότι η έγχυση εξάρτησης είναι ένα υποσύνολο της αρχής του IOC. Τα δοχεία IOC αξιοποιούν την έγχυση εξάρτησης για να αντιστρέψουν τη ροή του ελέγχου.

Ξεκινώντας

Για να ξεκινήσετε με αυτήν την εφαρμογή, δημιουργήστε ένα νέο έργο WebAPI στο Visual Studio. Στη συνέχεια, εγκαταστήστε τα απαραίτητα πακέτα από το NuGet για να εργαστείτε με το NInject. Μπορείτε να εγκαταστήσετε το πακέτο Ninject.Web.WebApi.WebHost μέσω του NuGet Package Manager. Αυτό με τη σειρά του θα εγκαταστήσει τα ακόλουθα δύο πακέτα για εσάς.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Έγχυση εξάρτησης με χρήση του NInject

Μόλις το πακέτο Ninject.Web.WebApi.WebHost εγκατασταθεί με επιτυχία, το αρχείο NInject.WebCommon.cs δημιουργείται αυτόματα μέσα στο φάκελο App_Start του έργου σας. Θα δημιουργηθεί πολύς κώδικας boilerplate - απλώς αγνοήστε τον και ανατρέξτε στη μέθοδο RegisterServices (). Με την πρώτη ματιά, πώς φαίνεται αυτή η μέθοδος.

private static void RegisterServices (πυρήνας IKernel)

{

}

Θα χρειαστεί να γράψετε τον κωδικό σας στη μέθοδο RegisterServices για να καταχωρήσετε τις υπηρεσίες ή να κάνετε ένεση των εξαρτήσεων. Θα επανέλθουμε σε αυτό αργότερα σε αυτό το άρθρο.

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

Ως επόμενο βήμα, δημιουργήστε έναν νέο ελεγκτή με το όνομα AuthorsController στο έργο WebAPI που έχετε δημιουργήσει. Αντικαταστήστε τον προεπιλεγμένο κωδικό του AuthorsController με αυτόν που δίνεται παρακάτω.

δημόσια τάξη AuthorsController: ApiController

    {

ιδιωτικό αναγνωστικό αποθετήριο IAuthorRepository;

δημόσιοι ΣυγγραφείςController (IAuthorRepository repository)

        {

this.repository = αποθετήριο;

        }

δημόσια λίστα Λήψη ()

        {

επιστροφή αποθετηρίου.GetAllAuthors ();

        }

    }

Το AuthorsController περιέχει μια απλή αναφορά στη διεπαφή IAuthorRepository, έναν κατασκευαστή ορίσματος και μια μέθοδο λήψης δράσης. Σημειώστε ότι το AuthorsController χρησιμοποιεί έναν κατασκευαστή για να εισάγει την εξάρτηση, δηλαδή, είναι ένας κατασκευαστής ορίσματος που αποδέχεται μια αναφορά στη διεπαφή IAuthorRepository ως παράμετρο. Η διεπαφή IAuthorRepository υλοποιείται από την κλάση AuthorRepository. Δείτε πώς μοιάζει η διεπαφή IAuthorRepository.

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

    {

Λίστα GetAllAuthors ();

    }

Η μέθοδος GetAllAuthors () χρησιμοποιείται για την επιστροφή μιας λίστας συγγραφέων. Τα ονόματα των συγγραφέων είναι κωδικοποιημένα. Η τάξη AuthorRepository εφαρμόζει τη μέθοδο GetAllAuthors όπως φαίνεται παρακάτω.

δημόσια τάξη AuthorRepository: IAuthorRepository

    {

δημόσια λίστα GetAllAuthors ()

        {

Συγγραφείς λίστας = νέα λίστα ();

συγγραφείς. Προσθήκη ("Joydip");

συγγραφείς. Προσθήκη ("Pete");

συγγραφείς. Προσθήκη ("Steve");

συγγραφείς επιστροφής;

        }

    }

Εγγραφή των υπηρεσιών μας στο Ninject

Αυτό το βήμα είναι πολύ απλό. Θυμάστε ότι συζητήσαμε νωρίτερα τη μέθοδο RegisterServices; Αυτό ανήκει στη στατική κλάση NinjectWebCommon στο αρχείο NinjectWebCommon.cs. Δείτε πώς μπορείτε να χρησιμοποιήσετε τη μέθοδο RegisterServices για να επιλύσετε τις εξαρτήσεις.

private static void RegisterServices (πυρήνας IKernel)

{

kernel.Bind (). Προς ();

Και αυτό πρέπει να κάνετε. Εάν δείτε τυχόν σφάλματα χρόνου εκτέλεσης που σχετίζονται με το NInject, αυτό μπορεί να οφείλεται στο ActivationException. Για να το διορθώσετε, πρέπει να εγκαταστήσετε την τελευταία έκδοση του πακέτου Ninject.Web.WebApi. Απλώς αναβαθμίστε το Ninject.Web.WebApi ξανά, μεταγλωττίστε και, στη συνέχεια, εκτελέστε ξανά την εφαρμογή σας.

Μπορείτε να ρίξετε μια ματιά σε αυτήν την ανάρτηση για περισσότερες πληροφορίες σχετικά με το πώς μπορούμε να χρησιμοποιήσουμε το NInject με το WebAPI.

$config[zx-auto] not found$config[zx-overlay] not found