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

Άποψη: 24701|Απάντηση: 1

[Πηγή] Το Autofac ελέγχει το εύρος και τη διάρκεια ζωής

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2020-9-19 12:51:52 | | | |
Ένα καλό άρθρο για να μάθετε σχετικά με το εύρος και τον κύκλο ζωής του ελέγχου Autofac, το εύρος του κύκλου ζωής είναι ισοδύναμο με μια μονάδα εργασίας στην εφαρμογή σας, μια μονάδα εργασίας θα ξεκινήσει το εύρος του κύκλου ζωής στην αρχή και, στη συνέχεια, οι υπηρεσίες που απαιτούν αυτήν τη μονάδα εργασίας αναλύονται από το εύρος του κύκλου ζωής.

Πεδία διάρκειας ζωής

Δημιουργία πεδίων Lifetme

Δημιουργήστε ένα πεδίο με μη αυτόματο τρόπο και Απόρριψη. Τα πεδία διάρκειας ζωής είναι μιας χρήσης και παρακολουθούν την απόρριψη εξαρτημάτων, επομένως φροντίστε να καλείτε πάντα το "Dispose()" ή να τα τυλίγετε σε δηλώσεις "χρήση".




Εμβέλεια διάρκειας ζωής ετικέτας

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

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



Προσθήκη καταχωρίσεων σε ένα εύρος διάρκειας ζωής

Το Autofac σάς επιτρέπει να προσθέτετε "εν κινήσει" όταν δημιουργείτε έναν κύκλο ζωής. Αυτό μπορεί να σας βοηθήσει όταν χρειάζεται να κάνετε ένα είδος περιορισμένης παράκαμψης εγγραφής "σημειακής συγκόλλησης" ή εάν γενικά χρειάζεστε απλώς κάποια πρόσθετα πράγματα σε ένα πεδίο εφαρμογής που δεν θέλετε να καταχωρίσετε παγκοσμίως. Αυτό το κάνετε περνώντας ένα λάμδα στο BeginLifetimeScope() που παίρνει ένα ContainerBuilder και προσθέτει εγγραφές. (Κατά τη δημιουργία ενός κύκλου ζωής, καταχωρήστε πρόσθετες υπηρεσίες χωρίς καθολική εγγραφή)



Πεδίο εφαρμογής παρουσίας

Το εύρος παρουσίας καθορίζει τον τρόπο κοινής χρήσης μιας παρουσίας μεταξύ των αιτήσεων. Όταν ζητάτε μια υπηρεσία, το autofac μπορεί να επιστρέψει ένα εύρος μεμονωμένης παρουσίας, μια νέα παρουσία ανά εμβέλεια εξάρτησης ή ένα μεμονωμένο σε ένα περιβάλλον, όπως ένα νήμα ή ένα αίτημα HTTP ανά εύρος διάρκειας ζωής. Αυτό ισχύει για περιπτώσεις που επιστρέφονται από μια ρητή κλήση Resolve() καθώς και για περιπτώσεις που δημιουργούνται εσωτερικά από το κοντέινερ για να ικανοποιήσουν τις εξαρτήσεις ενός άλλου στοιχείου.

  • Στιγμιότυπο ανά εξάρτηση
  • Μεμονωμένη παρουσία
  • Στιγμιότυπο ανά διάρκεια ζωής
  • Παρουσία ανά αντίστοιχο εύρος διάρκειας ζωής
  • Παρουσία ανά αίτημα
  • Παρουσία ανά ιδιοκτησία
  • Πεδίο εφαρμογής νήματος


Στιγμιότυπο ανά εξάρτηση

Ονομάζεται επίσης μεταβατικό ή «εργοστασιακό» σε άλλα κοντέινερ, επιστρέφει μια μοναδική παρουσία κάθε φορά που ζητείται μια υπηρεσία. Εάν δεν έχει καθοριστεί κύκλος ζωής, αυτή είναι η προεπιλεγμένη συμπεριφορά.



Κάθε εξάρτηση Resolve επιστρέφει ένα νέο στοιχείο.



Μεμονωμένη παρουσία

Η ίδια παρουσία επιστρέφεται σε όλες τις αιτήσεις και τα ένθετα εμβόρια.




Στιγμιότυπο ανά διάρκεια ζωής

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



Όταν αναλύετε το στοιχείο παρουσίας ανά εύρος διάρκειας ζωής, υπάρχει μόνο μία παρουσία σε κάθε ένθετη εμβέλεια (π.χ. ανά μονάδα εργασίας).


Παρουσία ανά αντίστοιχο εύρος διάρκειας ζωής

Αυτό είναι παρόμοιο με το Instance Per Lifetime Scope, αλλά ο έλεγχος μπορεί να μοιραστεί με πιο ακριβείς παρουσίες. Όταν δημιουργείτε έναν ένθετο κύκλο ζωής, μπορείτε να του προσθέσετε ετικέτα ή να του δώσετε ένα όνομα. Ένα στοιχείο με εύρος διάρκειας ζωής ανά αντιστοίχιση θα έχει το πολύ μία παρουσία ανά ένθετο εύρος διάρκειας ζωής που ταιριάζει με ένα δεδομένο όνομα. Αυτό επιτρέπει τη δημιουργία singleton με εμβέλεια, όπου οι ένθετοι κύκλοι μπορούν να μοιράζονται στοιχεία χωρίς να δημιουργούν καθολικές παρουσίες.

Χρήσιμο για μεμονωμένες μονάδες εργασίας, όπως αιτήσεις http, που δημιουργούνται ως ένθετοι κύκλοι ζωής. Εάν δημιουργηθεί μια ένθετη διάρκεια ζωής ανά αίτημα HTTP, τότε οποιοδήποτε στοιχείο με εύρος ανά διάρκεια ζωής θα έχει μια παρουσία ανά αίτημα HTTP. (Περισσότερα σχετικά με το εύρος διάρκειας ζωής ανά αίτημα παρακάτω.)

Στις περισσότερες εφαρμογές, απαιτείται μόνο μία ιεραρχική ένθεση κοντέινερ για την αναπαράσταση μιας μονάδας εργασίας. Εάν απαιτούνται πολλά ένθετα επίπεδα (π.χ. global->request->transaction), μπορούν να δημιουργηθούν στοιχεία για κοινή χρήση σε ένα συγκεκριμένο επίπεδο μέσω ετικετών.



Όταν ξεκινά ένας ένθετος κύκλος ζωής, οι ετικέτες συσχετίζονται με αυτόν τον κύκλο ζωής. Θα λάβετε μια εξαίρεση, εάν προσπαθήσετε να επιλύσετε ένα στοιχείο ανά αντιστοίχιση εύρους διάρκειας ζωής, όταν δεν υπάρχει σωστά ονομαζόμενο εύρος διάρκειας ζωής. (Εάν αναλυθεί ο κύκλος ζωής της μη αποθηκευμένης ετικέτας, θα προκύψει μια εξαίρεση.)



Παρουσία ανά αίτημα

Ορισμένοι τύποι εφαρμογών έχουν φυσικά σημασιολογία τύπου "αίτημα", όπως ASP.NET MVC. Μεταξύ αυτών των τύπων εφαρμογών, είναι χρήσιμο να υπάρχει κάποια μορφή "singleton ανά αίτημα". Η παρουσία ανά αίτημα δημιουργείται πάνω από την παρουσία ανά αντίστοιχη εμβέλεια διάρκειας ζωής παρέχοντας μια γνωστή ετικέτα εύρους διάρκειας ζωής, μια μέθοδο ευκολίας εγγραφής και ενσωμάτωση για κοινή εφαρμογή (μία παρουσία ανά αίτημα δημιουργείται πάνω από το εύρος διάρκειας ζωής ανά αντιστοίχιση παρέχοντας μια γνωστή ετικέτα διάρκειας ζωής, μια μέθοδο ευκολίας καταχώρισης και ενοποίηση για κοινούς τύπους εφαρμογών). Ουσιαστικά, είναι ανά αντίστοιχο εύρος ζωής.

Αυτό σημαίνει ότι εάν δεν υπάρχει τρέχον αίτημα και αναλύσετε ένα στοιχείο που έχει καταχωρηθεί με βάση την παρουσία ανά αίτημα, θα εμφανιστεί μια εξαίρεση. Υπάρχει ένα λεπτομερές FAQ που περιγράφει πώς να εργαστείτε με διάρκεια ζωής ανά αίτημα.

Η σύνδεση με υπερσύνδεσμο είναι ορατή.



Παρουσία ανά ιδιοκτησία

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



Σε αυτό το παράδειγμα, η υπηρεσία ServiceForHandler θα έχει εμβέλεια στη διάρκεια ζωής της ιδιόκτητης παρουσίας MessageHandler.



Πεδίο εφαρμογής νήματος

Μπορείτε να ανατρέξετε σε αυτό

Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Πραγματική μάχη

Χρησιμοποιώ τη λειτουργία Instance Per Lifetime Scope.

Στο winform, όταν εκτελείται η κλήση, χρησιμοποιεί κάθε φορά ένα πλαίσιο βάσης δεδομένων, όπως φαίνεται στο παρακάτω σχήμα:



_dbContext.GetHashCode();
13583655
_dbContext.GetHashCode();
13583655
_dbContext.GetHashCode();
13583655

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

Θέλω το autofac να επιστρέφει ένα νέο αντικείμενο κάθε φορά που κάνω κλικ στο κουμπί, ο κώδικας είναι ο εξής:


Οπως φαίνεται παρακάτω:



(Τέλος)




Προηγούμενος:.NET/C# Υδατογραφημένο κείμενο για εικόνες σε παράθεση
Επόμενος:ASP.NET Απαγόρευση πρόσβασης σε αρχεία καταγραφής με τη μορφή διευθύνσεων URL
Δημοσιεύτηκε στις 2022-9-8 09:58:24 |
Ακριβώς αυτό που χρειαζόμαστε
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com