|
|
Δημοσιεύτηκε στις 14/9/2018 1:22:21 μ.μ.
|
|
|
|

Το εύρος παρουσίας καθορίζει τον τρόπο κοινής χρήσης των υπηρεσιών μεταξύ των αιτήσεων.
Αρχική διεύθυνση:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Μία παρουσία ανά εξάρτηση
Με αυτήν την επιλογή, μια νέα παρουσία επιστρέφεται κάθε φορά που ζητείται η υπηρεσία. Χρησιμοποιήστε το InstancePerDependency(). Αυτή είναι η προεπιλεγμένη επιλογή. Ο παρακάτω κώδικας, γραμμές 2 και 3 είναι ισοδύναμοι.
Ο παρακάτω κώδικας δημιουργεί μια νέα παρουσία για κάθε βρόχο, για συνολικά 100 παρουσίες.
Μία παρουσία
Χρησιμοποιήστε αυτήν την επιλογή για να ζητήσετε μια υπηρεσία είτε στο ριζικό είτε στο ένθετο εύρος, επιστρέφοντας και τα δύο την ίδια παρουσία. Χρησιμοποιήστε το SingleInstance() για να καθορίσετε.
Ο παρακάτω κώδικας, w1 και w2 είναι πάντα το ίδιο αντικείμενο και υπάρχει μόνο μία παρουσία της κλάσης Worker σε 100 βρόχους.
Μία παρουσία ανά εύρος κύκλου ζωής
Χρησιμοποιήστε αυτήν την επιλογή για να ζητήσετε μια υπηρεσία σε ένα συγκεκριμένο ILifetimeScope, επιστρέφοντας μόνο μία παρουσία. Χρησιμοποιήστε το InstancePerLifetimeScope(). Στον παρακάτω κώδικα, οι 100 φορές w1 στο scope1 είναι το ίδιο αντικείμενο και οι 100 φορές w2 στο scope2 είναι το ίδιο αντικείμενο, αλλά τα w1 και w2 δεν είναι το ίδιο αντικείμενο.
Μία παρουσία ανά αντίστοιχο εύρος κύκλου ζωής
Παρόμοιο με το [μία παρουσία ανά εύρος κύκλου ζωής] παραπάνω, αλλά με περισσότερο έλεγχο. Χρησιμοποιήστε αυτήν την επιλογή για να επιτρέψετε στο αντικείμενο ILifetimeScope να εφοδιαστεί με ένα tag. Υπάρχει μόνο μία παρουσία στο εύρος της αντιστοίχισης ετικέτας. Χρησιμοποιήστε τη μέθοδο InstancePerMatchingLifetimeScope().
Στον παρακάτω κώδικα, τα w1 και w2 είναι τα ίδια, τα w3 και w4 είναι τα ίδια, αλλά τα w1 και w3 είναι διαφορετικά.
Η κατάλληλη σήμανση πρέπει να παρέχεται κατά την ανάλυση και ο ακόλουθος κώδικας δημιουργεί μια εξαίρεση.
Μία παρουσία ανά αίτημα
Ορισμένες εφαρμογές έχουν φυσικά σημασιολογία αιτήματος, όπως εφαρμογές ASP.NET MVC ή WebForm. Το [One instance per request] υλοποιείται με βάση το [one instance per matching lifecycle range], παρέχοντας δείκτες εμβέλειας, λειτουργίες καταχώρισης και ενοποίηση κοινών τύπων. Ουσιαστικά, [μία παρουσία ανά αντίστοιχο εύρος κύκλου ζωής].
Το ASP.NET Core χρησιμοποιεί μία παρουσία ανά εύρος κύκλου ζωής αντί για μία παρουσία ανά αίτημα.
Μία παρουσία ανά ιδιοκτησία
Ο<T> τύπος έμμεσης συσχέτισης Ιδιόκτητη δημιουργεί ένθετες περιοχές κύκλου ζωής. Με την εγγραφή παρουσίας ανά ιδιοκτησία, μπορείτε να περιορίσετε τις εξαρτήσεις σε ιδιόκτητες παρουσίες.
Σε αυτήν την περίπτωση, η υπηρεσία ServiceForHandler περιορίζεται στο πεδίο εφαρμογής της παρουσίας MessageHandler.
Εύρος νημάτων
Το Autofac μπορεί να αναγκάσει τα αντικείμενα του νήματος Α να μην ικανοποιούν τις εξαρτήσεις του νήματος Β.
Στη συνέχεια, αφήστε το καθένα να δημιουργήσει το δικό του εύρος ζωής
Σημαντικό: Σε ένα σενάριο πολλαπλών νημάτων, προσέξτε να μην εκκαθαρίσετε το γονικό εύρος.Διαφορετικά, τα υποπεδία στο νήμα που προκύπτει δεν θα μπορούν να επιλύσουν την υπηρεσία.
Κάθε νήμα θα έχει τη δική του παρουσία του MyThreadScopedComponent, το οποίο είναι ουσιαστικά ένα singleton με εμβέλεια κύκλου ζωής. Οι περιπτώσεις στο πεδίο εφαρμογής δεν παρέχονται εξωτερικά, επομένως είναι εύκολο να διατηρήσετε τα στοιχεία απομονωμένα μεταξύ των νημάτων.
Με την προσθήκη της παραμέτρου ILifetimeScope, η γονική περιοχή μπορεί να εισαχθεί στον κώδικα που δημιουργεί το νήμα και το Autofac θα εισάγει αυτόματα την τρέχουσα περιοχή, η οποία στη συνέχεια μπορεί να χρησιμοποιηθεί για τη δημιουργία ένθετων πεδίων.
Εάν θέλετε να το ελέγξετε περαιτέρω, μπορείτε να χρησιμοποιήσετε το [μία παρουσία ανά αντίστοιχο εύρος κύκλου ζωής] για να συσχετίσετε στοιχεία με εμβέλεια νήματος με εσωτερικά πεδία κύκλου ζωής, όπως φαίνεται στην εικόνα:
Το "Πλαίσιο" στο διάγραμμα είναι το εύρος κύκλου ζωής που δημιουργείται από τη μέθοδο BeginLifetimeScope.
|
Προηγούμενος:Εφέ κλικ του ποντικιού στο μπροστινό μέρος: ελευθερία, δημοκρατία, ευημερίαΕπόμενος:{"error_msg": "Η πιστοποίηση IAM απέτυχε"}
|