Intro to Dependency Injection Inversion of Control Presenter

  • Slides: 21
Download presentation
Intro to Dependency Injection & Inversion of Control Presenter - Donn Felker

Intro to Dependency Injection & Inversion of Control Presenter - Donn Felker

About Me – Donn Felker � Senior Consultant for Microsoft Gold Certified Partner- Statêra.

About Me – Donn Felker � 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 Foo. Theory Community (www. footheory. com) � Blog: http: //blog. donnfelker. com � Email: donn@donnfelker. com

What I intend to do… � Present Dependency Injection and Inversion of Control in

What I intend to do… � 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.

What I DO NOT intend to do… � Confuse you. � Pretend to be

What I DO NOT intend to do… � 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.

Agenda � What is a Dependency? � Dependency Injection Pros/Cons � Simple Application Architecture

Agenda � 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

What is a “Dependency”? � Some common dependencies include: ◦ Application Layers �Data Access

What is a “Dependency”? � 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 (Http. Context, Session, Request, etc)

Dependencies at a Very High Level User Interface Depends on Business Logic Layer Which

Dependencies at a Very High Level User Interface Depends on Business Logic Layer Which Depends On Data Access Layer Which Depends On Database BROKEN BUILD! CI Server

Get a Resource Involved… Open IDE Tests Pass And then… Run Tests Get Latest

Get a Resource Involved… Open IDE Tests Pass And then… Run Tests Get Latest Compile

Example of a Dependency

Example of a Dependency

What problems do dependencies create? � Code is tightly coupled � Difficult to isolate

What problems do dependencies create? � Code is tightly coupled � Difficult to isolate when testing � Difficult to maintain ◦ If I change Component. X how do I know what else it will affect? Did I break anything? �If tests are in place they can be your safety net

What is Dependency Injection? � The ability to supply (inject) an external dependency into

What is Dependency Injection? � The ability to supply (inject) an external dependency into a software component. � Types of Dependency Injection: ◦ Constructor (Most popular) ◦ Setter ◦ Method

Constructor Injection Injecting a ICustomer. Repository and a ICustomer. DTOMapper through the constructor. Note:

Constructor Injection Injecting a ICustomer. Repository and a ICustomer. DTOMapper through the constructor. Note: This is the most popular type of injection.

Setter Injection Injecting a ICustomer. Repository through the setter.

Setter Injection Injecting a ICustomer. Repository through the setter.

Method Injection Injecting a ICustomer. Repository as well as an integer dependency.

Method Injection Injecting a ICustomer. Repository as well as an integer dependency.

Dependency Injection Pros & Cons � Pros ◦ ◦ Loosely Coupled Increases Testability (A

Dependency Injection Pros & Cons � 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

Overview of Example Application Web UI or Console App (UI Layer) Customer Service Layer

Overview of Example Application Web UI or Console App (UI Layer) Customer Service Layer Customer DTO Mapper Customer Domain Repository Layer DB Layer (Not implemented for brevity)

Demonstration Lets See Some Code…

Demonstration Lets See Some Code…

What is Inversion of Control � Sometimes referred to as Dependency Inversion Principle (DIP)

What is 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. ”

Io. C Demonstration The best example is to see it in code.

Io. C Demonstration The best example is to see it in code.

Questions?

Questions?

Resources � Containers ◦ ◦ � Windsor: http: //shrinkster. com/ym 6 Unity: http: //shrinkster.

Resources � Containers ◦ ◦ � Windsor: http: //shrinkster. com/ym 6 Unity: http: //shrinkster. com/ym 5 Structure Map: http: //shrinkster. com/ym 7 Spring. NET: http: //shrinkster. com/ym 8 Unity Screencast (Pn. P Guidance) ◦ http: //shrinkster. com/yma � Good Book to help break dependencies: ◦ Working Effectively with Legacy Code (Michael Feathers) � http: //shrinkster. com/ym 9 � Contact Me ◦ donn@donnfelker. com ◦ http: //blog. donnfelker. com � All resources from this talk will be posted within 24 hours on this blog.