Κοινή χρήση τεχνολογίας

Δοχείο C# IOC, έγχυση εξάρτησης και αναστροφή ελέγχου

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Αντιστροφή ελέγχου (IoC)

ορισμός : Η αντιστροφή του ελέγχου είναι μια αρχή σχεδιασμού που αντιστρέφει τη ροή ελέγχου στον παραδοσιακό προγραμματισμό. Στα παραδοσιακά μοντέλα προγραμματισμού, οι εξαρτήσεις μεταξύ των στοιχείων δημιουργούνται και διατηρούνται εσωτερικά από τα ίδια τα στοιχεία. Στην αντιστροφή της λειτουργίας ελέγχου, αυτή η εξάρτηση διαχειρίζεται ένα εξωτερικό κοντέινερ (όπως το πλαίσιο Spring, Microsoft.Extensions.DependencyInjection στο .NET, κ.λπ.). μέσω του εξωτερικού δοχείου που απαιτούνται εξαρτήσεις.

κύρια ιδέα: Μετακινεί τη δημιουργία αντικειμένων και τη διαχείριση των εξαρτήσεων μεταξύ τους από τα ίδια τα αντικείμενα σε εξωτερικά δοχεία.

πλεονέκτημα

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

Έγχυση εξάρτησης (DI)

ορισμός : Η ένεση εξάρτησης είναι ένας συγκεκριμένος τρόπος για την επίτευξη αντιστροφής του ελέγχου. Περιλαμβάνει τη μετάδοση εξαρτήσεων (υπηρεσιών ή αντικειμένων) σε κλάσεις αντί να αφήνουμε τις κλάσεις να τις δημιουργούν οι ίδιες.

Μέθοδος υλοποίησης

  • έγχυση κατασκευαστή : Οι εξαρτήσεις παρέχονται μέσω του κατασκευαστή της κλάσης. Αυτή είναι η πιο κοινή και προτεινόμενη μορφή DI στην C#.
  • Ένεση ιδιοκτησίας : Εκχώρηση εξαρτήσεων μέσω δημόσιων ιδιοτήτων της κλάσης. Αυτή η προσέγγιση παρέχει ευελιξία, αλλά μπορεί να εκθέσει την εσωτερική κατάσταση και να μειώσει την ενθυλάκωση.
  • μέθοδος ένεσης : Περάστε τις εξαρτήσεις μέσω των παραμέτρων της μεθόδου. Κατάλληλο για έγχυση μόνο εξαρτήσεων που απαιτούνται από μια συγκεκριμένη μέθοδο.

Δοχείο ΔΟΕ

ορισμός :Το κοντέινερ IOC είναι ένα πλαίσιο για τη διαχείριση του κύκλου ζωής αντικειμένων και των εξαρτήσεων. Δημιουργεί αυτόματα αντικείμενα με βάση τη διαμόρφωση (όπως αρχεία XML, σχολιασμούς ή διαμόρφωση κώδικα) και εισάγει εξαρτήσεις σε αυτά τα αντικείμενα.

αποτέλεσμα

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

Χρησιμοποιήστε κοντέινερ IOC για να διαχειριστείτε τις εξαρτήσεις

Στη C#, μπορείτε να χρησιμοποιήσετε μια ποικιλία κοντέινερ IOC για τη διαχείριση εξαρτήσεων, όπως το Microsoft.Extensions.DependencyInjection (το ενσωματωμένο κοντέινερ DI του .NET Core και νεότερες εκδόσεις), το Autofac κ.λπ. Ακολουθεί το Microsoft.Extensions.DependencyInjection ως παράδειγμα για να εισαγάγει τον τρόπο χρήσης των κοντέινερ IOC για τη διαχείριση εξαρτήσεων σε έργα C#.

Βήμα 1: Εγγραφείτε για υπηρεσία

Οι υπηρεσίες χρησιμοποιούνται συνήθως σε εφαρμογές .NETProgram.csήStartup.cs(για έργα ASP.NET Core) που χρησιμοποιούνται σεIServiceCollectionδιεπαφή για εγγραφή.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IMyService, MyService>(); // 将MyService注册为单例服务
    // 其他服务注册
}
  • 1
  • 2
  • 3
  • 4
  • 5
Βήμα 2: Εισάγετε εξαρτήσεις

Εισάγετε εξαρτήσεις στον ελεγκτή, την υπηρεσία ή οποιαδήποτε άλλη κλάση μέσω του κατασκευαστή.

public class MyController : Controller
{
    private readonly IMyService _myService;

    public MyController(IMyService myService)
    {
        _myService = myService;
    }

    // ... 控制器的其他代码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Στο παραπάνω παράδειγμα,MyControllerΗ κλάση εγχέεται μέσω του κατασκευαστήIMyServiceΗ υλοποίηση της διεπαφής (δηλ.MyService είδος).Με αυτόν τον τρόπο, ότανMyControllerΌταν δημιουργηθεί, το κοντέινερ της ΔΟΕ θα γίνει αυτόματαIMyServiceΗ υλοποίηση εγχέεται στον κατασκευαστή.

Προφυλάξεις
  • Χρησιμοποιήστε αφαιρέσεις που βασίζονται σε διεπαφή: Προτιμήστε διεπαφές ή αφηρημένες κλάσεις για εξαρτημένους τύπους για να βελτιώσετε την ευελιξία και τη δυνατότητα δοκιμής.
  • Αποφύγετε την υπερβολική χρήση μονότονων: Οι υπηρεσίες Singleton θα πρέπει να χρησιμοποιούνται με προσοχή για την αποφυγή ζητημάτων που σχετίζονται με το κράτος.
  • Παρακολούθηση του κύκλου ζωής του αντικειμένου: Κατανοήστε τον κύκλο ζωής των εξαρτήσεων (singleton, scope, transient) για να διαχειριστείτε αποτελεσματικά τη χρήση των πόρων.