/vanilla-dependency-injection

Resources related to vanilla dependency injection. Moved from the training examples repository.

Primary LanguageC#MIT LicenseMIT

vanilla-dependency-injection

Resources related to vanilla dependency injection. Moved from the training examples repository.

Notable sources on DI and Vanilla DI vs containers:

Supporting sources

Topics

  1. Vanilla DI vs a DI container
    1. Automatic dependency resolution (_1_AutomaticDependencyResolution and handcoded)
      1. When is not helping
      2. When is helping - reusing recipe
      3. When is not helping again - multiple recipes for the same type
      4. Minimizing recipe reuse problem in Vanilla DI with local functions - _1_AutomaticDependencyResolution
    2. Managing scopes (_2_LifestyleMagament)
      1. Container example
      2. Vanilla DI and manual Dispose
      3. What if Dispose throws an exception?
      4. Disposal subsystem
    3. Handling missing dependencies (MissingDependency.cs)
      1. Container - without validation
      2. Container - with validation
      3. Container - with lambda registration
      4. Vanilla DI - compile time
    4. Circular dependencies (CircularDependencies.cs)
      1. Uncomment assertions
      2. CD without container validations
      3. CD with container validations
      4. CD with container and lambdas (!!)
      5. Conclusion: avoid lambdas in MsDi
      6. CD with Vanilla DI
    5. Dead code detection (DeadCode.cs_)
    6. Extracting code into libraries (ExtractingLibrary.cs)
    7. Extracting dependencies from constructor (handcode)
    8. Simple vs complex dependency graphs
    9. Multiple lifestyles for different instances of a type (MultipleLifestylesOfInstancesTheSameClass.cs)
    10. Decorators/composites (DecoratorsWithMultipleChains.cs)
      1. Optional - different syntaxes for containers (autofac, scrutor)
    11. Similar subgraphs differing with leaves.
      1. MultipleObjectOfSameTypeConfiguredDifferentlyAndNamingPropagation2.cs - with polymorphism
        1. Vanilla DI
        2. MsDi without modules
        3. MsDi with modules
        4. Vanilla DI with refactoring
    12. [Optional - can also be discussed in aspnet core example] Graph readability
    13. [Optional - needs more code] Multiple constructors & factory methods
    14. [Optional - needs more code] Passing literals into constructors
  2. How to integrate Vanilla DI into ASP.NET Core? (BasicIntegration)
    1. Composition root object
    2. Minimal API
    3. Controllers
    4. SignalR
  3. How to do Vanilla DI well and scale it?
    1. Refactoring object composition - simple techniques
    2. Decomposing object composition into components
    3. Testing subcomponents