logo

Thông báo

Icon
Error

Chia sẻ
Tùy chọn
Xem
Xem bài viết cuối
Offline admin  
#1 Đã gửi : 22/05/2015 lúc 09:29:14(UTC)
admin

Danh hiệu: Administration

Chức danh:

Nhóm: Administrators
Gia nhập: 23-07-2013(UTC)
Bài viết: 6,110
Man
Viet Nam
Đến từ: Vietnam

Cảm ơn: 10 lần
Được cảm ơn: 2 lần trong 2 bài viết

I will try as much as possible to make this very elementary. That way, you can build on the concept and create your own complex solutions or ideas.

Now imagine we have a church called Jubilee, which has branches world wide. Our aim is to simply get an item from each branch. Here would be the solution with DI;

1) Create an interface IJubilee:

public interface IJubilee

{

string GetItem(string userInput);

}

2) Create a class JubileeDI which would take the IJubilee interface as a constructor and return an item:

public class JubileeDI

{

readonly IJubilee jubilee;

public JubileeDI(IJubilee jubilee)

{

this.jubilee = jubilee;

}

public string GetItem(string userInput)

{

return this.jubilee.GetItem(userInput);

}

}

3) Now create three braches of Jubilee namely JubileeGT, JubileeHOG, JubileeCOV, which all MUST inherit the IJubilee interface. For the fun of it, make one of them implement its method as virtual:

public class JubileeGT : IJubilee

{

public virtual string GetItem(string userInput)

{

return string.Format("For JubileeGT, you entered {0}", userInput);

}

}

public class JubileeHOG : IJubilee

{

public string GetItem(string userInput)

{

return string.Format("For JubileeHOG, you entered {0}", userInput);

}

}

public class JubileeCOV : IJubilee

{

public string GetItem(string userInput)

{

return string.Format("For JubileCOV, you entered {0}", userInput);

}

}

public class JubileeGTBranchA : JubileeGT

{

public override string GetItem(string userInput)

{

return string.Format("For JubileeGT branch A, you entered {0}", userInput);

}

}

4) That is it! Now let us see DI in action:

        JubileeDI jCOV = new JubileeDI(new JubileeCOV());

JubileeDI jHOG = new JubileeDI(new JubileeHOG());

JubileeDI jGT = new JubileeDI(new JubileeGT());

JubileeDI jGTA = new JubileeDI(new JubileeGTBranchA());

var item = jCOV.GetItem("Give me some money!");

var item2 = jHOG.GetItem("Give me a check!");

var item3 = jGT.GetItem("I need to be fed!!!");

var item4 = jGTA.GetItem("Thank you!");

For each instance of the container class, we pass a new instance of the class we require, which enables loose coupling.

Hope this explains the concept in a nutshell

Ai đang xem chủ đề này?
OceanSpiders 2.0
Chủ đề tương tự
ASP.NET Core Dependency Injection (.NET Core)
Bởi admin 10-12-2018 lúc 10:22:46(UTC)
Dependency Injection vs Inversion of Control (Application Patterns)
Bởi admin 28-04-2017 lúc 03:53:13(UTC)
Dependency Injection with Web API and Autofac (Web API)
Bởi admin 23-02-2016 lúc 05:03:12(UTC)
Dependency Injection (Application Patterns)
Bởi admin 23-02-2016 lúc 11:52:54(UTC)
Managing Dependency Injection with Autofac (Object-oriented programing)
Bởi admin 13-04-2015 lúc 05:11:35(UTC)
Simple Dependency Injection (Object-oriented programing)
Bởi admin 13-04-2015 lúc 05:09:07(UTC)
AngularJS Modularization & Dependency Injection (Angular Modules)
Bởi admin 17-03-2015 lúc 10:59:04(UTC)
Dependency Injection (Dependency Injection in Angular)
Bởi admin 16-03-2015 lúc 04:20:57(UTC)
Di chuyển  
Bạn không thể tạo chủ đề mới trong diễn đàn này.
Bạn không thể trả lời chủ đề trong diễn đàn này.
Bạn không thể xóa bài của bạn trong diễn đàn này.
Bạn không thể sửa bài của bạn trong diễn đàn này.
Bạn không thể tạo bình chọn trong diễn đàn này.
Bạn không thể bỏ phiếu bình chọn trong diễn đàn này.

| Cung cấp bởi YAF.NET 2.2.4.14 | YAF.NET © 2003-2020, Yet Another Forum.NET
Thời gian xử lý trang này hết 1.009 giây.