19
Dennis Doomen | @ddoomen | Aviva Solutions | The Continuous Improver

Strengths and weaknesses of dependency injection

Embed Size (px)

Citation preview

Dennis Doomen | @ddoomen | Aviva Solutions | The Continuous Improver

Order Processing

IOrderRepository

NhibernateOrderRepository

Storage

RavenDBOrderRepository

Storage Storage

In-memory Repository

Bookkeeping

Diagnostics Decorator

Diagnostics Decorator

Strategy Selection

Allow Test-time dependencies

Inject dependencies from different

modules

Control lifecycle (e.g. per http request,

singleton, etc)

Inject Cross-cutting Concerns

Promote depending on abstractions

Order Processing

IStoreOrders<T>+ CreateQuery<T>();+ Add<T>();+ Delete<T>();

NHibernateRepository

Order Processing

IStoreOrders+ GetIncompletedOrders(minValue);+ StoreOrder();+ CompleteOrder();

OrderRepository

VS

• Don’t use the Service Locator pattern

• Use container only at the root…

• …so don’t use the container as a dependency

• Constructor injection only

• Pass local dependencies to methods

• Avoid container-specific dependencies

• Use delegates for factories, indexes, etc.

• Include registrations in at least one test

• Use types explicitly in registrations

• Let the container handle the life cycle

• Access date & time through delegate

• Avoid configuration-based setup (e.g. XML).

System

Package

Package

Package

PackagePackage

Package

Maybe

Probably not

Probably yes

TinyIoc

Autofac