Αναθεώρηση:
Συνήθως ένα στιγμιαίο αντικείμενο είναι μια δημιουργία μιας κλάσης με τη νέα λέξη-κλειδί
Η C# δημιουργεί δυναμικά μια παρουσία μιας κλάσης στο εργοστάσιο κλάσης χρησιμοποιώντας τις ακόλουθες μεθόδους:
Activator.CreateInstance (Τύπος) Activator.CreateInstance (Τύπος, Αντικείμενο[])
Αρχικά, ορίζουμε μια διεπαφή ITest ως εξής:
Ορίστε δύο υλοποίησης, συγκεκριμένα: TestA και TestB, και ο κώδικας έχει ως εξής:
όπου το TestB έχει έναν μη κενό κατασκευαστή
Η μέθοδος GetUserName στην κλάση TestB πρέπει να διαβάσει το αρχείο διαμόρφωσης μέσω του IConfiguration και, στη συνέχεια, να το συρράψει με τις εισερχόμενες παραμέτρους για να επιστρέψει την τιμή επιστροφής.
Το αρχείο διαμόρφωσης έχει ως εξής:
Δημιουργούμε αντικείμενα φορτώνοντας δυναμικά το dll, δημιουργώντας τα με ανάκλαση και ενσαρκώνοντάς τα μέσω του Activator και του ActivatorUtilities αντίστοιχα, με τον ακόλουθο κώδικα:
Επιστροφή αποτελεσμάτων:
ret "Γεια σου itsvse.com" π.χ. Μήνυμα "Δεν έχει οριστεί κατασκευαστής χωρίς παραμέτρους για τον τύπο 'ClassLibrary1.TestB'."
ret "Γεια σου itsvse.com" ret "ΑΑΑΑ itsvse.com" Όταν χρησιμοποιείτε το Activator για τη δημιουργία ενός αντικειμένου TestB, αναφέρεται ένα σφάλμα:Δεν έχει οριστεί κατασκευαστής χωρίς παραμέτρους για τον τύπο «ClassLibrary1.TestB».
Η δημιουργία TestA και TestB μέσω του ActivatorUtilities δεν θα αναφέρει σφάλμα και η μέθοδος μπορεί να εκτελεστεί κανονικά, όπως φαίνεται παρακάτω:
Δεν υπάρχει πρόβλημα στη χρήση του Activator για τη δημιουργία αντικειμένων στο πλαίσιο .NET, αλλά στον πυρήνα asp.net, εισάγονται οι έννοιες του IOC και του DI και πολλά αντικείμενα δεν είναι κατασκευαστές χωρίς παραμέτρους και πρέπει να περάσουν στην αντίστοιχη κλάση υλοποίησης.
Όπου _services στατικές μεταβλητές ορίζονται ως εξής:
CreateInstance(IServiceProvider; Τύπος, Αντικείμενο[])
παράμετρος
Πάροχος IServiceProvider Πάροχος υπηρεσιών για την επίλυση εξαρτήσεων
instanceType Τύπος Ο τύπος που θα ενεργοποιηθεί
Παράμετροι Αντικείμενο[]
Παράμετροι κατασκευαστή που δεν παρέχονται από τον πάροχο。
Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
(Τέλος)
|