شماره تماس 09336863931 | 09178169907 پست الکترونیک provid.ir@gmail.com

آموزش اصل Inversion of Control در برنامه نویسی #19

آموزش اصل Inversion of Control در برنامه نویسی #19 را در این قسمت از وبسایت آموزش برنامه نویسی پرووید دانلود کنید.

روش تزریق از طریق تابع سازنده (Constructor Injection)

همانطور که در قسمت قبل گفتیم ما می‌توانیم Dependency یک کلاس را در زمان ساخته شدن یک شی از آن در درون تابع سازنده ش تزریق کنیم. لطفاً نگاهی به مثال زیر بیندازید که با استفاده از روش تزریق از طریق تابع سازنده وابستگی مربوط به CustomerBusinessLogic که از نوع CustomerDataAcces هست به آن تحویل داده می شود.

public class CustomerBusinessLogic
{
    ICustomerDataAccess _dataAccess;

    public CustomerBusinessLogic(ICustomerDataAccess custDataAccess)
    {
        _dataAccess = custDataAccess;
    }

    public CustomerBusinessLogic()
    {
        _dataAccess = new CustomerDataAccess();
    }

    public string ProcessCustomerData(int id)
    {
        return _dataAccess.GetCustomerName(id);
    }
}

public interface ICustomerDataAccess
{
    string GetCustomerData(int id);
}

public class CustomerDataAccess: ICustomerDataAccess
{
    public CustomerDataAccess()
    {
    }

    public string GetCustomerName(int id) 
    {
        //get the customer name from the db in real application        
        return "Dummy Customer Name"; 
    }
}

در این کد کلاس CustomerBusinessLogic حاوی یک تابع سازنده است که یک پارامتر از نوع ICustomerDataAcces را دریافت می‌کند. هم اکنون زمانی که یک شی از CustomerBusinessLogic ساخته می شود باید Dependency آن یعنی یک کلاس که اینترفیس ICustomerDataAcces را پیاده سازی کرده است از طریق تابع سازنده به درون آن تزریق شود.

public class CustomerService
{
    CustomerBusinessLogic _customerBL;

    public CustomerService()
    {
        _customerBL = new CustomerBusinessLogic(new CustomerDataAccess());
    }

    public string GetCustomerName(int id) {
        return _customerBL.GetCustomerName(id);
    }
}

بسته ی جامع آموزش Inversion of Control و IoC Container ها

از شما دعوت می کنیم که از بسته ی جامع آموزش Inversion of Control و IoC Container ها دیدن کنید.

همانطور که در کد بالا مشاهده می کنید کلاس CustomerService یک شی از کلاس CustomerDataAcces را ساخته و آن را به درون تابع سازنده کلاس CustomerBusinessLogic تزریق می کند. با استفاده از این روش دیگر کلاس CustomerBusinessLogic نیازی به ساختن یک شی از کلاس CustomerDataAcces با استفاده از کلمه کلیدی new و یا حتی استفاده از کلاس DataAccessFactory ندارد. بلکه کلاس CustomerService یک شی از کلاس ICustomerDataAcces را ساخته و در زمان ساخته شدن یک شی از کلاس CustomerBusinessLogic این شی را به درون تابع سازنده آن تزریق می کند. با استفاده از این روش دو کلاس CustomerBusinessLogic و CustomerDataAcces به طور کامل Loosely Coupled در می آیند.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *