Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 20665|Απάντηση: 0

[.NET Πυρήνας] ASP.NET Το Core εισάγει το NullReferenceException με το χαρακτηριστικό Autofac

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2020-9-12 20:57:21 | | | |
Το Autofac είναι φοβερό. Δοχεία NET IoC. Διαχειρίζεται τις εξαρτήσεις μεταξύ των κλάσεων, έτσι ώστε η εφαρμογή να μπορεί να τροποποιηθεί εύκολα καθώς αυξάνεται η κλίμακα και η πολυπλοκότητα. Υλοποιείται αντιμετωπίζοντας τις κανονικές .NET ως στοιχεία.
Είμαι επίσης κλισέ για τα δοχεία Autofac και έχω γράψει πολλά άρθρα:

Χρησιμοποιήστε το autofac στο MVC για να εφαρμόσετε την αυτόματη εγγραφή
https://www.itsvse.com/thread-8993-1-1.html

Autofac Επιλύθηκε το σφάλμα "Εντοπίστηκε εξάρτηση κυκλικού στοιχείου"
https://www.itsvse.com/thread-8970-1-1.html

Το ASP.NET Core χρησιμοποιεί το Autofac για την εφαρμογή της έγχυσης IOC
https://www.itsvse.com/thread-7563-1-1.html

Το πεδίο εφαρμογής του στοιχείου autofac
https://www.itsvse.com/thread-5080-1-1.html

Το χαρακτηριστικό mvc Controller Autofac εγχύθηκε στον ελεγκτή
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Η έγχυση εξάρτησης πυρήνα χρησιμοποιεί το δοχείο IOC που συνοδεύει
https://www.itsvse.com/thread-7562-1-1.html

Το ASP.NET Core χρησιμοποιεί το Autofac για την εφαρμογή της έγχυσης IOC
https://www.itsvse.com/thread-7563-1-1.html

Το ASP.NET Core χρησιμοποιεί το Autofac για την υλοποίηση της υποκλοπής AOP
https://www.itsvse.com/thread-7566-1-1.html


Δημιουργήστε ένα νέο έργο 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;
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com