شما اینجا هستید: خانه / مقالات آموزشی / تزریق کلاس های Lazy با Castle Windsor

تزریق کلاس های Lazy با Castle Windsor

Castle Windsor یکی از IoC Container های رایگان و متن باز (Open Source) دات نت می باشد. در این مقاله به بررسی نحوه ی تزریق وابستگی ها (Dependency Injection) در قالب کلاس های Lazy با استفاده از کتابخانه ی Castle Windsor میپردازیم.

در صورتی که با مفاهیم Dependency Injection و IoC Container آشنایی ندارید، می توانید به مطالعه ی این مقاله از آقای Martin Fowler بپردازید. همچنین جهت آشنایی با مفهوم Lazy Initialization و کلاس های Lazy در دات نت می توانید از این پست استفاده کنید.

کد زیر را در نظر بگیرید :

کلاس Notification که از طریق Constructor به کلاس Registration تزریق شده است، تنها در صورتی استفاده می شود که ثبت نام کاربر با موفقیت انجام گیرد. در عین حال این کلاس با هر بار ساخته شدن کلاس Registration، ساخته شده و حافظه میگیرد (در صورتی که فرض کنیم این سرویس ها Singleton تعریف نشده اند). به نحوه ی Config این کلاس ها در Castle Windsor دقت کنید :

برای بازدهی بهتر می توان کلاس Notification را به صورت Lazy به کلاس Registration تزریق کرد تا مقدار دهی و ساخت این کلاس تنها در صورت نیاز اتفاق بیفتد :

 در صورتی که تغییر فوق را بر روی کد اعمال کنید، با خطا مواجه خواهد شد زیرا Castle Windsor کلاس NotificationService را شناخته اما کلاس Lazy آن را نمیشناسد. برای حل این مشکل کلاسی با نام LazyOfTComponentLoader در Castle Windsor 3 اضافه شده است و تنها نیاز است تا آن را در Kernel اضافه کنید :

 

نکته مهم :  قابلیت فوق در صورتی که Lifestyle کلاس از نوع Scoped و یا Bound باشد (در زمان نوشته شدن این مقاله، یعنی نسخه ی ۳٫۳ Castle Windsor) قابل استفاده نخواهد بود.

درباره هادی احمدی

هادی احمدی
برنامه نویس، تحلیلگر و طراح نرم افزار که به فعالیت بر روی بسترهای نرم افزاری مایکروسافت مشغول هستم. علاقه مند به مباحث طراحی و معماری نرم افزار و همچنین پیاده سازی سیستم های اطلاعاتی پیچیده می باشم.

2 نظر

  1. سلام
    اینiocبه جز وب سایت خودش pdf معتبری هم در موردش هست؟؟

نظر بدهید

آدرس ایمیلتان منتشر نمیشودگزینه های الزامی ستاره دار شده اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

رفتن به بالا