Dependency Injection vs Service Locator - Best Practice

42
Lars-Erik Kindblad Senior Consultant Blog: kindblad.com Dependency Injection vs. Service Locator - Best Practice

description

Lars-Erik Kindblad presentation at the Capgemini Microsoft User Group 2012.

Transcript of Dependency Injection vs Service Locator - Best Practice

Page 1: Dependency Injection vs Service Locator - Best Practice

Lars-Erik KindbladSenior ConsultantBlog: kindblad.com

Dependency Injection vs. Service Locator- Best Practice

Page 2: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Agenda

Intro• Inversion of Control• Dependency Injection Patterns• Service Locator Patterns• Inversion of Control Containers

Best Practice• What patterns to use• When to use the patterns

Summary

Page 3: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Inversion of Control

Inversion of Control = IOC Make code loosely coupled Make unit testing possible How? Move creation of dependencies outside the class they are

being used in A better name - Inversion of Dependency Creation

Page 4: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Traditional Code

Inversion of Control

Page 5: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Traditional Code

Inversion of Control Code

Page 6: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Traditional Code

Page 7: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection - Constructor Injection

Page 8: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection - Interface Injection

Page 9: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection - Setter Injection

Page 10: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Static Service Locator

Page 11: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Injected Service Locator

Page 12: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Inversion of Control Container

A framework that can automatically create a given type with all the required dependencies

Popular frameworks• Unity• Castle Windsor• Ninject• StructureMap• etc.

Page 13: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Inversion of Control Container

Manual approach

Using an IOC Container

Page 14: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Page 15: Dependency Injection vs Service Locator - Best Practice

Which patterns to use

Page 16: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Traditional Code

Page 17: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection - Constructor Injection

Page 18: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection - Interface Injection

Page 19: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection - Setter Injection

Page 20: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Static Service Locator

Page 21: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Injected Service Locator

Page 22: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

When to use which patterns

Page 23: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Always use Dependency Injection – Constructor Injection

...except

Page 24: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

FACADE CLASSES

Page 25: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Facade Classes

Page 26: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection

Page 27: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Service Locator

Page 28: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

LOOPS

Page 29: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Loops

Page 30: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection

Page 31: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Service Locator

Page 32: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection using Func<>

Page 33: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

BASE CLASSES

Page 34: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Base Classes

Page 35: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Dependency Injection

Page 36: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Service Locator

Page 37: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

UNKNOWN TYPES AT COMPILE TIME

Page 38: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Unknown types at compile time

Page 39: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Service Locator

Page 40: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

Summary

Constructor Injection Injected Service Locator

Facade classes(WCF Services,MVC Controllers)

X

Loops X (Func<>) X

Base classes X

Unknown types at compile time

X

All other scenarios X

Page 41: Dependency Injection vs Service Locator - Best Practice

| Sector, Alliance, Offering

QUESTIONS?

Page 42: Dependency Injection vs Service Locator - Best Practice

www.capgemini.com

The information contained in this presentation is proprietary. ©2010 Capgemini. All rights reserved