روش تعریف یک module initializer
در مثال زیر، قالب ابتدایی یک ModuleInitializer را مشاهده میکنید:
namespace CS9Features { using System.Runtime.CompilerServices; internal static class TestModuleInitializer { [ModuleInitializer] public static void MyModuleInitializer() { // put your module initializer here } } }
- باید استاتیک باشد.
- باید بدون پارامتر باشد.
- باید خروجی آن void باشد.
- نباید به صورت جنریک تعریف شود.
- این متد باید در همان اسمبلی، قابل دسترسی باشد؛ یعنی سطح دسترسی آن باید یا public و یا internal باشد.
- نباید local function باشد.
میتوان بیش از یک ModuleInitializer را در یک اسمبلی تعریف کرد
به مثال زیر دقت کنید:
namespace CS9Features { using System.Runtime.CompilerServices; internal static class TestModuleInitializer { [ModuleInitializer] public static void MyModuleInitializer1() { // put your module initializer here } [ModuleInitializer] public static void MyModuleInitializer2() { // put your module initializer here } } }
این مورد یکی از مهمترین تفاوتهای module initializerها با سازندههای static است. ترتیب اجرای سازندههای static مشخص نیست و بر اساس کدهای کلاینت و زمان دسترسی به کلاسهای مختلف، سازندهی استاتیک کلاس A میتواند پس از سازندهی استاتیک کلاس B اجرا شود و یا برعکس. اما همواره نحوهی اجرای module initializerها مشخص و ترتیبی است و همچنین نیازی به فراخوانی آنها توسط هیچ کلاینتی نیست.
موارد کاربرد module initializerها
نمونهی بسیار پرکاربرد module initializer ها، اجرای کدهایی پیش از شروع به اجرای آزمونهای خودکار یک برنامهاست؛ مانند کدهایی که یک بانک اطلاعاتی را ایجاد و مقدار دهی اولیه میکنند و پس از آن قرار است آزمایشهای برنامه بر روی این بانک اطلاعاتی مشخص، اجرا شوند.