در این پست، آموزش نحوه اعمال تزریق وابستگی در برنامه DevExpress WPF را ارائه خواهم داد. این پست فرض می کند که شما قبلاً در مورد تزریق وابستگی، برنامه WPF و همچنین MVVM می دانید. DevExpress MVVM یکی از فریمورکهای MVVM است که میتوانیم از آن برای توسعه یک برنامه دسکتاپ با استفاده از WPF استفاده کنیم.
زمینه
یک برنامه به خوبی طراحی شده می تواند از بسته تزریق وابستگی برای حل وابستگی های شی بین ماژول ها استفاده کند. اگر یک شی به اشیاء دیگر وابسته باشد، اشیاء مورد نیاز از طریق نوعی به شیء مورد نیاز تزریق می شوند. بنابراین، به جای ایجاد صریح اشیاء، اشیاء مورد نیاز توسط بسته تزریق وابستگی (پکیج شخص ثالث) ایجاد، تزریق و مدیریت می شوند و سپس به شی مورد نیاز "تزریق" می شوند. طول عمر اجسام مورد نیاز نیز توسط این بسته مدیریت می شود. بسته تزریق وابستگی را کانتینر IoC نیز می نامند. IoC مخفف Inversion of Control است.
سود
مزیت اصلی استفاده از تزریق وابستگی، اتصال شل بین ماژول ها است. با اتصال شل، ما می توانیم ماژول هایی را به طور جداگانه توسط توسعه دهندگان مختلف توسعه دهیم. همچنین به این معنی است که آزمایش را میتوان آسانتر انجام داد، زیرا میتوانیم اشیاء ماکت را به ماژول مورد آزمایش تزریق کنیم و جایگزین اشیاء واقعی کنیم. Loose-coupling همچنین به این معنی است که میتوانیم اجرای اشیاء مورد نیاز را با موارد دیگر تغییر داده یا جایگزین کنیم و در عین حال حداقل تأثیر یا تغییرات را در برنامه حفظ کنیم.
مزیت دیگر مدیریت چرخه زندگی خودکار شی است که توسط IoC Container ایجاد شده است. ما مجبور نیستیم بدانیم چه زمانی اشیاء مورد نیاز را ایجاد و نابود کنیم. کانتینر IoC ایجاد، محدوده و همچنین تخریب اشیا را مدیریت می کند.
وابستگی ها در MVVM
در یک چارچوب کاربردی MVVM مانند DevExpress-MVVM، الگوی وابستگی ماژول از شکل زیر قابل مشاهده است:
از شکل بالا می بینیم که نماها به مدل های view بستگی دارند، سپس مدل های view به سرویس ها بستگی دارند. بسته تزریق وابستگی را می توان برای حل مدل های view مورد نیاز نماها استفاده کرد. همچنین می تواند اشیاء سرویس های مورد نیاز مدل های view را حل کند.
نمونه کد
برای نشان دادن نحوه عملکرد تزریق وابستگی در برنامه DevExpress-MVVM WPF، یک پروژه نمایشی در اینجا ایجاد می کنم. برای ایجاد این پروژه آزمایشی، من از Visual Studio 2017 استفاده می کنم، اما شما می توانید از Visual Studio 2015 یا نسخه قبلی استفاده کنید زیرا WPF یک پلتفرم است که از زمان .NET Framework 3.5 وجود داشته است.
من در اینجا یک سناریوی ساده می سازم. در این سناریو، من یک نمای ورود داده ساده به نام CustomerView دارم. این نما به مدل view به نام CustomerViewModel دسترسی خواهد داشت. مدل view، CustomerRepository را فراخوانی می کند که به عنوان سرویسی برای تداوم داده ها در یک حافظه عمل می کند. برای ساده کردن این مثال تا حد امکان، من فقط یک مخزن ساختگی ایجاد می کنم که واقعاً داده ها را ذخیره نمی کند. تاکید اصلی این نمونه، اجرای Ioc Container برای اعمال تزریق وابستگی است.
فریمورک DevExpress MVVM را می توان آزادانه به عنوان یک بسته جداگانه قابل دانلود از گالری بسته NuGet استفاده کرد. کانتینر IoC که در این نمونه استفاده خواهم کرد، UnityContainer است، همچنین میتوانید آزادانه از گالری بسته NuGet دانلود کنید.
یک پروژه WPF در ویژوال استودیو ایجاد کنید
ویژوال استودیو را باز کنید و سپس با انتخاب یک قالب موجود از لیست قالب، یک پروژه دسکتاپ WPF ایجاد کنید. من نام پروژه خود را WPFDependencyInjection می گذارم. این نام به طور خودکار توسط محلول حاوی استفاده می شود.