Overview of common customizations

This is a list of interfaces or abstract classes in DD4T that are very commonly implemented cq. extended. 

InterfaceRationaleExamplesKnown customersPriorityNotes
ILoggerImplement a different logging mechanismSerilog, MEFEssity, EcclesiasticalHigh
IDependencyMapperAdd dependency mapping independently from any DI implementation

For custom DI implementations: read dependency mappings

For any other customization: write dependency mappings

Essity, EcclesiasticalVery High
DD4T ViewModel base attributesSee ViewModel base attributes for a complete overviewVarious extensions to the ViewModel attributesFujitsu, Essity, RicohHigh
ICacheAgentImplement a different caching mechanismRedis, serialized cache agentEssity, EcclesiasticalHigh
IPublicationResolverImplement a custom publication resolving mechanismCommon practice is to create a publication resolver wrapped around the DynamicMappingsRetriever (which isn't out of the box in DD4T). Other use cases would be to use browser settings or Geolocation. ManyLowIn Web 8 one could argue that the DynamicMappingsRetriever is always an improvement, and DXA 2.0 does not support older Tridion versions.
ILoggerCritical, Error, Warning, Information, DebugLog through the mechanism provided by DD4TManyHigh
ILinkResolver / DefaultLinkResolverResolveUrl (2 overloads)Extend link resolving mechanismEssity, FujitsuHighExamples: to remove file extensions, always link to canonical url, cross-site scripting (Fujitsu)
IRichTextResolver / DefaultRichTextResolverResolveExtend rich text resolving mechanismEssityHighExamples: select correct CDN url out of a set (used with ECL), custom logic depending on the schema of the target component
IMessageProviderStartCreate custom cache invalidation mechanismVasco, FujitsuMediumMostly used (I think) because of problems in the official DD4T version (see https://github.com/dd4t/DD4T.Caching.ApacheMQ).
ILoggerCritical, Error, Warning, Information, DebugLog through the mechanism provided by DD4TManyHigh
ILinkResolver / DefaultLinkResolverResolveUrl (2 overloads)Extend link resolving mechanismEssity, FujitsuHighExamples: to remove file extensions, always link to canonical url, cross-site scripting (Fujitsu)
IRichTextResolver / DefaultRichTextResolverResolve
Essity
Select correct CDN url out of a set (used with ECL)
IPageProvider / IComponentPresentationProvider / IBinaryProvider / VariousSupport different Tridion version or load data from a different source, e.g. for unit testing.

Extremely powerful because it allows customers on older Tridion versions to use DD4T.
IDD4TConfigurationVariousSupport a different configuration mechanism (out of the box it is using the Web.config / App.config)Not sureMediumCould be useful for unit testing purposes.