20080531 intro to dependency injection & inversion of control

21
Presenter - Donn Felker

Upload: donnfelker

Post on 10-May-2015

3.042 views

Category:

Technology


0 download

DESCRIPTION

Presentation from the May 31st 2008 Desert Code Camp

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.