مطالب
Dependency Injection
در ادامه مباحث بهتر کد بنویسیم و الگوهایی که در این رابطه معرفی شدند، اخیرا کتابی از انتشارات manning منتشر شده تحت عنوان Dependency Injection . هر چند به ظاهر این کتاب برای جاوا کارها تهیه شده اما قسمت عمدهای از آن برای سایر زبانهای برنامه نویسی دیگر نیز قابل استفاده است.
DESCRIPTION
In object-oriented programming, a central program normally controls other objects in a module, library, or framework. With dependency injection, this pattern is inverted—a reference to a service is placed directly into the object which eases testing and modularity. Spring or Google Guice use dependency injection so you can focus on your core application and let the framework handle infrastructural concerns.
Dependency Injection explores the DI idiom in fine detail, with numerous practical examples that show you the payoffs. You'll apply key techniques in Spring and Guice and learn important pitfalls, corner-cases, and design patterns. Readers need a working knowledge of Java but no prior experience with DI is assumed.
WHAT'S INSIDE:
◊ How to apply it (Understand it first!)
◊ Design patterns and nuances
◊ Spring, Google Guice, PicoContainer, and more
◊ How to integrate DI with Java frameworks
In object-oriented programming, a central program normally controls other objects in a module, library, or framework. With dependency injection, this pattern is inverted—a reference to a service is placed directly into the object which eases testing and modularity. Spring or Google Guice use dependency injection so you can focus on your core application and let the framework handle infrastructural concerns.
Dependency Injection explores the DI idiom in fine detail, with numerous practical examples that show you the payoffs. You'll apply key techniques in Spring and Guice and learn important pitfalls, corner-cases, and design patterns. Readers need a working knowledge of Java but no prior experience with DI is assumed.
WHAT'S INSIDE:
◊ How to apply it (Understand it first!)
◊ Design patterns and nuances
◊ Spring, Google Guice, PicoContainer, and more
◊ How to integrate DI with Java frameworks
راستی، این کتاب تر و تازه رو میتونید از همین کتاب فروشیهای دور و اطراف نیز تهیه کنید! در سایت booktraining دات ارگ در قسمت graphics-and-design به تاریخ 4 آگوست.
یکی از متداولترین الگوهای امروزی برای رفع وابستگی به یک سرویس در یک Object وابسته به ان سرویس الگوی Dependency Injection میباشد . در این الگو , وابستگی به سایر کلاسها , به صورت اتوماتیک به داخل سرویس مورد نظر تزریق میشود و نیاز به نمونه گیری و ساخت Object از ان وابستگی به صورت Explicit نیست . این الگو در مهندسی نرم افزار فوایدیی (Refactoring , کنترل LifeTime اشیاء , ...) دارد که مرتبط با موضوع این مقاله نیست , اما نحوه صحیح نمونه گیریی از DbContext با الگوی Dependency Injection در انواع برنامهها اعم از وب یا دسکتاپ موضوع اصلی این مقاله میباشد.
نظرات مطالب
کمپین ضد IF !
توضیحات تکمیلی:
سؤال : آیا refactoring صورت گرفته در مطلب فوق از نوع تزریق وابستگیها (dependency injection) بود؟
پاسخ: خیر.
پیاده سازی الگوی تزریق وابستگیها زمانی معنا پیدا میکند که شما حداقل 2 کلاس داشته باشید (مطلب فوق با یک کلاس شروع شد)، همچنین این دو کلاس ارجاعی به یکدیگر داشته باشند و اصطلاحا به هم گره خورده باشند.
سؤال : چگونه در یک پروژه بزرگ میتوان نیاز به پیاده سازی الگوی تزریق وابستگیها را تشخیص داد؟
پاسخ:
آیا نسخهی ultimate ویژوال استودیوی 2010 بر روی سیستم شما نصب است؟
اگر بله: (نصب است)
برای نمونه به مطلب Discovering Circular References مراجعه کنید.
اگر خیر: (نصب نیست)
در این حالت از ابزار رایگانی به نام .NET Architecture Checker میتوانید استفاده کنید. همان نمودارهای نسخهی ultimate ویژوال استودیو را برای شما ترسیم خواهد کرد.
سؤال : آیا میتوان از کتابخانههای تزریق وابستگیها و فریم ورکهای مرتبط، جهت مدیریت سادهتر قسمت آخر مطلب فوق یعنی تامین پیاده سازیهای اینترفیسهایی که قرار است در زمان اجرا استفاده شوند، کمک گرفت؟
پاسخ: بله.
این مورد یکی از کاربردهای متداول این ابزارها است (برای مثال ساخت برنامههای افزونه پذیر و همچنین سادهتر کردن Object composition و وهله سازیهای مرتبط) و ... این مورد را نباید با اصل refactoring صورت گرفته در مثال جاری اشتباه گرفت.
سؤال : آیا refactoring صورت گرفته در مطلب فوق از نوع تزریق وابستگیها (dependency injection) بود؟
پاسخ: خیر.
پیاده سازی الگوی تزریق وابستگیها زمانی معنا پیدا میکند که شما حداقل 2 کلاس داشته باشید (مطلب فوق با یک کلاس شروع شد)، همچنین این دو کلاس ارجاعی به یکدیگر داشته باشند و اصطلاحا به هم گره خورده باشند.
سؤال : چگونه در یک پروژه بزرگ میتوان نیاز به پیاده سازی الگوی تزریق وابستگیها را تشخیص داد؟
پاسخ:
آیا نسخهی ultimate ویژوال استودیوی 2010 بر روی سیستم شما نصب است؟
اگر بله: (نصب است)
برای نمونه به مطلب Discovering Circular References مراجعه کنید.
اگر خیر: (نصب نیست)
در این حالت از ابزار رایگانی به نام .NET Architecture Checker میتوانید استفاده کنید. همان نمودارهای نسخهی ultimate ویژوال استودیو را برای شما ترسیم خواهد کرد.
سؤال : آیا میتوان از کتابخانههای تزریق وابستگیها و فریم ورکهای مرتبط، جهت مدیریت سادهتر قسمت آخر مطلب فوق یعنی تامین پیاده سازیهای اینترفیسهایی که قرار است در زمان اجرا استفاده شوند، کمک گرفت؟
پاسخ: بله.
این مورد یکی از کاربردهای متداول این ابزارها است (برای مثال ساخت برنامههای افزونه پذیر و همچنین سادهتر کردن Object composition و وهله سازیهای مرتبط) و ... این مورد را نباید با اصل refactoring صورت گرفته در مثال جاری اشتباه گرفت.
اشتراکها
تزریق وابستگی قبل از Asp.net core
اشتراکها
تزریق وابستگی در ASP.NET Core
اشتراکها
تزریق وابستگیها در جاوا اسکریپت
This feature enables the following:
- Support setter-based, interface-based and constructor-based injection in web application project in Handler, Module, Page, User control and Custom control.
- Support setter-based and interface-based injection in web site project in Handler, Module, Page, User controls and Custom controls.
- Be able to plug in different dependency injection frameworks.