یادداشتهای آموزشی .NET: ارائهدهنده حافظه داخلی سفارشی (۱) - ثبتنام و کشف
نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۱/۲۵ ۰۱:۱۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
EF Core میپردازد. هدف اصلی، ایجاد یک نقطه ورودی مناسب برای ثبتنام ارائهدهنده سفارشی است تا EF Core بتواند آن را کشف کرده، در خط لوله گزینهها ادغام کند و در نهایت منطق ثبتنام سرویس آن را در هنگام مقداردهی اولیه DbContext فراخوانی کند.
برای این منظور، از روشهای توسعهدهنده به سبک EF Core به عنوان نقطه ورودی استفاده میشود. این روشها با استفاده از قرارداد Use[ProviderName] (مانند UseCustomMemoryDb) فعال میشوند. این روشها DbContextOptionsBuilder را برمیگردانند و امکان پیکربندی ارائهدهنده را فراهم میکنند. این مرحله تنها ارائهدهنده را در خط لوله پیکربندی EF Core ادغام میکند و رفتار واقعی در پیادهسازی IDbContextOptionsExtension.ApplyServices تعریف میشود.
کلاس CustomMemoryDbContextOptionsExtension رابط IDbContextOptionsExtension را پیادهسازی میکند. این کلاس به عنوان حامل پیکربندی ارائهدهنده عمل میکند و سیگنال رسمی برای EF Core برای کشف و فعالسازی یک ارائهدهنده پایگاه داده است. در طول ساخت سازنده سرویس، EF Core توسعههای ثبتشده را اسکن کرده و متد ApplyServices آنها را فراخوانی میکند. در این لحظه، سرویسهای خاص ارائهدهنده (مانند کامپایل پرسوجو، خط لوله اجرا، انتزاعهای پایگاه داده و غیره) در ظرف داخلی DI سیمکشی میشوند.
متد ApplyServices در طول ساخت سازنده داخلی سرویس EF Core برای یک نمونه خاص از DbContextOptions اجرا میشود. سرویسهای ارائهدهنده در ظرف داخلی EF Core برای آن زمینه (یک ظرف "داخلی" با دامنه Scope) ثبت میشوند، نه در ظرف DI سراسری برنامه. به عبارت دیگر، سیمکشی ارائهدهنده به گراف وابستگی داخلی DbContext جدا شده است. در این مرحله، پیکربندی به عنوان یک Singleton ثبت میشود و برای تمام سرویسهای ارائهدهنده قابل دسترسی است.