این مقاله درک اساسی از معماری جداشده و اصل وارونگی کنترل (IoC) را فرض میکند. اگر در هر دو مفهوم بسیار جدید هستید، توصیه می کنم ابتدا هر دو را درک کنید. همه ما می دانیم که معماری جداسازی شده یکی از اهداف اصلی یک الگوی طراحی خوب در برنامه ها است و وارونگی کنترل راهی برای انجام آن است. همانطور که از نام وارونگی کنترل پیداست، ما کنترل زیر را به ترتیب معکوس هدایت می کنیم تا معماری جداسازی شده را پیاده سازی کنیم.
دو پیاده سازی زیر از Inversion of Control وجود دارد:
- تزریق وابستگی
- سرویس یاب
در این مثال ما Dependency Injection را با استفاده از Unity در یک برنامه MVC5 پیاده سازی می کنیم. بنابراین، برای دنبال کردن این مقاله، پیشنهاد می کنم یک برنامه Empty MVC 5 ایجاد کنید و بسته های زیر را از NuGet Package Manager نصب کنید.
لطفاً توجه داشته باشید که Unity محصولی از مایکروسافت است و به ما کمک می کند تا یک مخزن از کلاس های وابستگی ایجاد کنیم که در حالت قابل اتصال باشد. به عبارت دیگر، مزیت اصلی یونیتی این است که در صورت نیاز می توانیم آن را به یک برنامه دیگر متصل کنیم.
برای نصب بسته های زیر از روش زیر استفاده کنید:
پس از نصب با موفقیت متوجه خواهید شد که اسمبلی زیر به برنامه اضافه شده است.
مرحله 1: Container Unity را ایجاد کنید
خوب، اکنون یک کلاس Bootstrapper به برنامه اضافه می کنیم. یک فایل .cs را بردارید و آن را بر اساس آن تغییر دهید.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using DITest.Repository;
- using Microsoft.Practices.Unity;
- using Microsoft.Practices.Unity.Mvc;
- namespace DITest
- {
- public class Bootstrapper
- {
- public static IUnityContainer Initialise()
- {
- var container = BuildUnityContainer();
- DependencyResolver.SetResolver(new UnityDependencyResolver(container));
- return container;
- }
- private static IUnityContainer BuildUnityContainer()
- {
- var container = new UnityContainer();
- // register all your components with the container here
- //This is the important line to edit
- container.RegisterType<ICompanyRepository, CompanyRepository>();
- RegisterTypes(container);
- return container;
- }
- public static void RegisterTypes(IUnityContainer container)
- {
- }
- }
- }
این کلاس Bootstrapper است که برای ایجاد ظرفی از اشیاء وابستگی پیاده سازی می شود. لطفا توجه داشته باشید که ما خطوط زیر را اضافه کرده ایم:
- container.RegisterType<ICompanyRepository, CompanyRepository>();
به تابع BuildUnityContainer() خط ثبت اینترفیس و پیاده سازی آن در کانتینر است، به زودی هر دو را ایجاد خواهیم کرد.
مرحله 2: ثبت نام کلاس کانتینر
اکنون کلاس کانتینر را در صفحه global.aspx ثبت می کنیم. اینجا صفحه صفحه global.aspx من است.
این خط برجسته، ظرف Unity را در برنامه ثبت می کند.