Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Ninject Menguruskan Suntikan Sepanjang Hayat dan Ketergantungan DbContext?
Ninject: Mengendalikan Suntikan Sepanjang Hayat dan Ketergantungan Objek
Soalan 1: Pembersihan DbContext
Bila menggunakan Ninject, anda tidak perlu risau tentang melupuskan DbContext secara manual contoh. Ninject secara automatik melupuskan sebarang objek pakai buang yang tidak terikat dengan InTransientScope(). Memandangkan kemungkinan besar anda menggunakan InParentScope() atau skop lain, Ninject akan mengendalikan pelupusan apabila skop yang sepadan dikumpul oleh pemungut sampah.
Soalan 2: Mengelakkan DbContext yang Disuntik dalam Pengawal Pangkalan
Secara umumnya disyorkan untuk mengelak daripada menggunakan kelas asas untuk Pengawal MVC. Mereka cenderung untuk melanggar Prinsip Tanggungjawab Tunggal dan membawa kepada objek tuhan. Sebaliknya, pertimbangkan untuk menggunakan penapis yang didaftarkan secara global untuk menangani kebimbangan silang.
Contoh:
Andaikan anda ingin menetapkan sifat ViewBag biasa berdasarkan pengguna semasa. Anda boleh membuat IAuthorizationFilter seperti ini:
public class CurrentUserProfileFilter : IAuthorizationFilter { private readonly MyDbContext context; public CurrentUserProfileFilter(MyDbContext context) { this.context = context; } public void OnAuthorization(AuthorizationContext filterContext) { // Set ViewBag properties based on current user information from DbContext } }
Kemudian, daftarkan penapis secara global dalam FilterConfig anda:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { FilterProviders.Providers.Insert(0, new GlobalFilterProvider(DependencyResolver.Current)); } }
Ini akan secara automatik menetapkan sifat ViewBag pada setiap permintaan tanpa memerlukan anda untuk menyuntik MyDbContext ke dalam pengawal anda.
Soalan 3: Lazy DB Instantiation Konteks
Secara lalai, Ninject mencipta objek dengan penuh semangat, tetapi mungkin untuk menjadikan objek terikat oleh Ninject malas (dicipta hanya apabila mula-mula diminta).
Walau bagaimanapun, ini tidak disyorkan untuk DbContext kerana ia mempunyai overhed permulaan yang besar, jadi tidak ada gunanya untuk menangguhkan penciptaannya. Selain itu, DbContext harus dilupuskan apabila ia selesai dan hayatnya harus dikawal sewajarnya.
Atas ialah kandungan terperinci Bagaimanakah Ninject Menguruskan Suntikan Sepanjang Hayat dan Ketergantungan DbContext?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!