Top Banner
Presenter - Donn Felker
21

20080531 Intro To Dependency Injection & Inversion Of Control

May 10, 2015

Download

Technology

donnfelker

Presentation from the May 31st 2008 Desert Code Camp
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 20080531 Intro To Dependency Injection & Inversion Of Control

Presenter - Donn Felker

Page 2: 20080531 Intro To Dependency Injection & Inversion Of Control

Senior Consultant for Microsoft Gold Certified Partner- Statêra.

8 years of experience in developing and architecting enterprise solutions.

Certifications: ◦ Microsoft Certified Technology Specialist◦ Certified SCRUM Master◦ ITIL Foundation Certified

Bachelors of Science in Software Engineering Member of FooTheory Community

(www.footheory.com) Blog: http://blog.donnfelker.com Email: [email protected]

Page 3: 20080531 Intro To Dependency Injection & Inversion Of Control

Present Dependency Injection and Inversion of Control in an understandable fashion

Present each topic at a detailed but comprehendible level

Give you the resources used in this talk so you can reference them in the future.

Page 4: 20080531 Intro To Dependency Injection & Inversion Of Control

Confuse you.

Pretend to be an authority in patterns, because, well … I’m not.

Get all “Fowler” on you.

Have theoretical conversations about practicality of the example apps I’m using for demonstration purposes.

Page 5: 20080531 Intro To Dependency Injection & Inversion Of Control

What is a Dependency? Dependency Injection Pros/Cons Simple Application Architecture Example Application High Level Architecture Demonstration 1

◦ Identifying and Breaking dependencies What is Inversion of Control Demonstration 2

◦ Custom Dependency Container◦ Introducing Microsoft Unity Container

Questions

Page 6: 20080531 Intro To Dependency Injection & Inversion Of Control

Some common dependencies include: ◦ Application Layers

Data Access Layer & Databases Business Layer

◦ External services & Components Web Services Third Party Components

◦ .NET Framework Components File Objects (File.Delete(…), Directory.Exists(…)) Web Objects (HttpContext, Session, Request, etc)

Page 7: 20080531 Intro To Dependency Injection & Inversion Of Control

CI Server

BROKEN BUILD!

Page 8: 20080531 Intro To Dependency Injection & Inversion Of Control
Page 9: 20080531 Intro To Dependency Injection & Inversion Of Control
Page 10: 20080531 Intro To Dependency Injection & Inversion Of Control

Code is tightly coupled Difficult to isolate when testing Difficult to maintain

◦ If I change ComponentX how do I know what else it will affect? Did I break anything? If tests are in place they can be your safety net

Page 11: 20080531 Intro To Dependency Injection & Inversion Of Control

The ability to supply (inject) an external dependency into a software component.

Types of Dependency Injection: ◦ Constructor (Most popular)◦ Setter ◦ Method

Page 12: 20080531 Intro To Dependency Injection & Inversion Of Control

Injecting a ICustomerRepository and a ICustomerDTOMapper through the constructor.

Note: This is the most popular type of injection.

Page 13: 20080531 Intro To Dependency Injection & Inversion Of Control

Injecting a ICustomerRepository through the setter.

Page 14: 20080531 Intro To Dependency Injection & Inversion Of Control

Injecting a ICustomerRepository as well as an integer dependency.

Page 15: 20080531 Intro To Dependency Injection & Inversion Of Control

Pros◦ Loosely Coupled◦ Increases Testability (A LOT!)◦ Separates components cleanly◦ Allows for use of Inversion of Control Container

Cons◦ Increases code complexity◦ Some Jr. Developers find it difficult to understand

at First◦ Can Complicate Debugging at First◦ Complicates following Code Flow

Page 16: 20080531 Intro To Dependency Injection & Inversion Of Control
Page 17: 20080531 Intro To Dependency Injection & Inversion Of Control

Lets See Some Code…

Page 18: 20080531 Intro To Dependency Injection & Inversion Of Control

Sometimes referred to as Dependency Inversion Principle (DIP)◦ The principle states that high level or low level

modules should not depend upon each other, instead they should depend upon abstractions.

Specific implementations (object instances) are deferred to a higher level of abstraction of control.◦ Examples:

Parent class(es) A Container

Referred to as the “Hollywood Principle”◦ “Don’t call us, we will call you.”

Page 19: 20080531 Intro To Dependency Injection & Inversion Of Control

The best example is to see it in code.

Page 20: 20080531 Intro To Dependency Injection & Inversion Of Control
Page 21: 20080531 Intro To Dependency Injection & Inversion Of Control

Containers◦ Windsor: http://shrinkster.com/ym6◦ Unity: http://shrinkster.com/ym5◦ Structure Map: http://shrinkster.com/ym7 ◦ Spring.NET: http://shrinkster.com/ym8 

Unity Screencast (PnP Guidance)◦ http://shrinkster.com/yma

Good Book to help break dependencies: ◦ Working Effectively with Legacy Code (Michael Feathers)

http://shrinkster.com/ym9 

Contact Me◦ [email protected]◦ http://blog.donnfelker.com

All resources from this talk will be posted within 24 hours on this blog.