Skip to content

Latest commit

 

History

History
122 lines (102 loc) · 2.68 KB

File metadata and controls

122 lines (102 loc) · 2.68 KB

Static root

Demonstrates how to create static composition roots that don't require instantiation of the composition class.

using Shouldly;
using Pure.DI;

DI.Setup(nameof(Composition))
    .Bind().As(Lifetime.PerResolve).To<FileSystem>()
    .Bind().To<Configuration>()
    .Root<IConfiguration>("GlobalConfiguration", kind: RootKinds.Static);

var configuration = Composition.GlobalConfiguration;
configuration.ShouldBeOfType<Configuration>();

interface IFileSystem;

class FileSystem : IFileSystem;

interface IConfiguration;

class Configuration(IFileSystem fileSystem) : IConfiguration;
Running this code sample locally
dotnet --list-sdk
  • Create a net10.0 (or later) console application
dotnet new console -n Sample
dotnet add package Pure.DI
dotnet add package Shouldly
  • Copy the example code into the Program.cs file

You are ready to run the example 🚀

dotnet run

Note

Static roots are useful when you want to access services without creating a composition instance.

The following partial class will be generated:

partial class Composition
{
  public static IConfiguration GlobalConfiguration
  {
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    get
    {
      #if NET9_0_OR_GREATER
      var perResolveLock = new Lock();
      #else
      var perResolveLock = new Object();
      #endif
      var perResolveFileSystem361 = default(FileSystem);
      if (perResolveFileSystem361 is null)
        lock (perResolveLock)
          if (perResolveFileSystem361 is null)
          {
            perResolveFileSystem361 = new FileSystem();
          }

      return new Configuration(perResolveFileSystem361);
    }
  }
}

Class diagram:

---
 config:
  maxTextSize: 2147483647
  maxEdges: 2147483647
  class:
   hideEmptyMembersBox: true
---
classDiagram
	FileSystem --|> IFileSystem
	Configuration --|> IConfiguration
	Composition ..> Configuration : IConfiguration GlobalConfiguration
	Configuration o-- "PerResolve" FileSystem : IFileSystem
	namespace Pure.DI.UsageTests.Basics.StaticRootScenario {
		class Composition {
		<<partial>>
		+IConfiguration GlobalConfiguration
		}
		class Configuration {
				<<class>>
			+Configuration(IFileSystem fileSystem)
		}
		class FileSystem {
				<<class>>
			+FileSystem()
		}
		class IConfiguration {
			<<interface>>
		}
		class IFileSystem {
			<<interface>>
		}
	}
Loading