|
|
Δημοσιεύτηκε στις 2020-9-12 20:57:21
|
|
|
|

Το Autofac είναι φοβερό. Δοχεία NET IoC. Διαχειρίζεται τις εξαρτήσεις μεταξύ των κλάσεων, έτσι ώστε η εφαρμογή να μπορεί να τροποποιηθεί εύκολα καθώς αυξάνεται η κλίμακα και η πολυπλοκότητα. Υλοποιείται αντιμετωπίζοντας τις κανονικές .NET ως στοιχεία. Είμαι επίσης κλισέ για τα δοχεία Autofac και έχω γράψει πολλά άρθρα:
Δημιουργήστε ένα νέο έργο ASP.NET Core 3.1 και αναφέρετε πακέτα που σχετίζονται με το autofac μέσω του nuget, ως εξής:
Ας δημιουργήσουμε μια νέα διεπαφή και υλοποίηση ITest, ο κώδικας έχει ως εξής:
Δημιουργήστε έναν νέο ελεγκτή βασικής κλάσης BaseController και άλλοι ελεγκτές κληρονομούν την αφηρημένη κλάση, προσθέστε την ιδιότητα ITest στη βασική κλάση και ο κώδικας είναι ο εξής:
Αφήστε το WeatherForecastController να κληρονομήσει από την αφηρημένη κλάση BaseController, προσθέτοντας την ακόλουθη μέθοδο δοκιμής:
Η μέθοδος ConfigureContainer στην κλάση Startup καταχωρεί τη διεπαφή και ορίζει την είσοδο του χαρακτηριστικού ελεγκτή, ο κώδικας έχει ως εξής:
Προσπαθήστε να επισκεφθείτε:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η εξαίρεση NullReferenceException παρατίθεται στο κενό μήνυμα, όπως φαίνεται στην παρακάτω εικόνα:
NullReferenceException: Object reference not set to an instance of an object.
ΠάσοΟ κατασκευαστής εγχέεται στη διεπαφή ITest, καλείται η μέθοδός του, η δοκιμή περνά και μπορεί να ονομαστεί κανονικά。
Αιτίες ανωμαλιών
Η υλοποίηση του ελεγκτή είναι πιο ειδική, ο ελεγκτής δεν επιλύει και ενεργοποιεί από προεπιλογή μέσω του δικού του κοντέινερ, διαχειρίζεται η ίδια η MVC, αλλά η Microsoft παρέχει αυτήν τη μέθοδο:
Μπορείτε να κάνετε τον ελεγκτή να χρησιμοποιεί το δικό του κοντέινερ καλώντας τη μέθοδο AddControllersAsServices(), ο κύριος πηγαίος κώδικας της οποίας είναι ο εξής:
Η μέθοδος ConfigureServices στο προεπιλεγμένο αντικείμενο εκκίνησης έχει ρυθμιστεί ως εξής:
Το τροποποιούμε σε:
Ή:
Ο πηγαίος κώδικας ServiceBasedControllerActivator είναι ο εξής:
Μόλις ρυθμιστεί, φορτώστε τον ελεγκτή απευθείας από το κοντέινερ DI, ο ελεγκτής θα αναλύσει την υπηρεσία από το Autofac και η έγχυση ιδιοτήτων που διαμορφώσαμε θα τεθεί σε ισχύ. Οπως φαίνεται παρακάτω:
Τέλος, επισυνάπτεται η διεύθυνση πηγαίου κώδικα του πυρήνα asp.net:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
(Τέλος)
|
Προηγούμενος:Το Hangfire προσθέτει δεδομένα κανονικά, αλλά συνεχίζει να εκτελείται λόγω της εξαίρεσηςΕπόμενος:Πώς να εμφανίσετε δεδομένα Sqlite σε προηγμένους πίνακες με το E4A;
|