37
Choosing an IoC Container Boris Modylevsky August 24, 2016

Choosing an IoC container

Embed Size (px)

Citation preview

Page 1: Choosing an IoC container

Choosing an IoC Container

Boris Modylevsky August 24, 2016

Page 2: Choosing an IoC container

About me

Boris Modylevsky

Senior developer @Quali

Clean Code Alliance group organizer

www.borismod.net

twitter.com/bormod

github.com/borismod

Page 3: Choosing an IoC container

What is Inversion of Control?

Page 4: Choosing an IoC container

What is Inversion of Control?

Page 5: Choosing an IoC container

Customer Flow Chart

SQL Server

Validate

Add

Page 6: Choosing an IoC container

What is Inversion of Control?

Page 7: Choosing an IoC container

Customer Flow Chart

Which DAL?

SQL Oracle

Validate

Add

Is this customer’s

work?

Page 8: Choosing an IoC container

Good Code

A good code is that which takes care of his logic rather than overloading himself with unconcerned logic.

Page 9: Choosing an IoC container

Inversion of Control

Which DAL?

SQL Oracle

Validate

Add

CustomerExternal

Entity

Page 10: Choosing an IoC container

What is Inversion of Control?

Page 11: Choosing an IoC container

• Decoupled system• Cleaner code• Easy to maintain and test

Inversion of Control benefits

Page 12: Choosing an IoC container

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

Dependency Injection

Page 13: Choosing an IoC container

Poor Man’s Dependency Injection

Dependency injection method by explicit initialization of classes and providing their

dependencies

Page 14: Choosing an IoC container

Demo

Page 15: Choosing an IoC container

IoC Container

A software component which enables registration and resolving classes and their dependencies

Page 16: Choosing an IoC container

Explicit registrationUnity

Page 17: Choosing an IoC container

Configuration File RegistrationUnity

Page 18: Choosing an IoC container

Constructor Injection

Page 19: Choosing an IoC container

Attribute Injection

Page 20: Choosing an IoC container

Method Injection

Page 21: Choosing an IoC container

Lifetime Scope

• Transient• Singleton• Per Web/WCF request• Custom

Page 22: Choosing an IoC container

Singleton RegistrationUnity

Page 23: Choosing an IoC container

Auto Registration

The ability to register types automatically based on rules provided

without specifying them manually.

Page 24: Choosing an IoC container

Modules Registration

The ability to group types registration by logical modules.

Page 25: Choosing an IoC container

Interception

The ability to change or augment the usual processing cycle.

Page 26: Choosing an IoC container

.NET IoC Containers

AutoFac fFastInjector Hiro Maestr

o Munq Speedioc

TinyIoc

Caliburn.Micro Funq IfInject

or MEF Ninject Spring.NET

Unity

Catel Grace LightCore MEF2 Petite Stiletto Win

dsor

DryIoc Griffin LightInject

MicroSliver

QuickInject

StructureMap No

Dynamo HaveBox LinFu Mugen SimpleInj

ectorStyleMVVM

Unity

Page 27: Choosing an IoC container

PopularityDownloads in millions

UnityNinject

AutoFacStructureMap

0

0.5

1

1.5

2

2.5

3

3.5

4

Downloads in millions

Page 28: Choosing an IoC container

Demo

Page 29: Choosing an IoC container

PerformanceTransient resolve

Source: http://tinyurl.com/h7qntep by Nathanael Mann

Page 30: Choosing an IoC container

Demo

Page 31: Choosing an IoC container

Compare

Popularity

Maturity

Readability

Environment

Maintenance

Integrations

Performance

Features

Page 32: Choosing an IoC container

Performance Comparison

Container Performance

AutoFac Average

DryIoc Fast

Dynamo Fast

LinFu Slow

Ninject Slow

SimpleInjector Fast

StructureMap Average

Unity Average

Windsor Average

Page 33: Choosing an IoC container

Registration Comparison

Container Code XML AutoAutoFac Yes Yes YesDryIoc Yes    Dynamo Yes YesLinFu Yes    Ninject Yes Yes YesSimpleInjector Yes Yes

StructureMap Yes Yes YesUnity Yes Yes YesWindsor Yes Yes Yes

Page 34: Choosing an IoC container

Features Comparison

Container Autowiring Custom lifetimes Interception

AutoFac Yes YesDryIoc Yes Yes  Dynamo Yes Yes  LinFu Yes YesNinject Yes YesSimpleInjector Yes Yes Yes

StructureMap Yes Yes Yes

Unity Yes Yes YesWindsor Yes Yes Yes

Page 35: Choosing an IoC container

Environments Comparison

Container .NET SL WP7 WP8

WinRT

AutoFac Yes Yes Yes Yes Yes

DryIoc Yes        

Dynamo Yes        

LinFu Yes        

Ninject Yes Yes Yes Yes

SimpleInjector Yes Yes Yes Yes

StructureMap Yes Yes Yes

Unity Yes Yes   Yes Yes

Windsor Yes Yes      

Page 36: Choosing an IoC container

How to choose?

Page 37: Choosing an IoC container

Thanks!Questions?