Upload
dennis-doomen
View
102
Download
1
Embed Size (px)
Citation preview
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