private static IServiceReference[] Validate(IInjector injector) { Config.Value.Injector.StrictDI = false; IServiceReference svc1, svc2, svc3, svc4; svc4 = injector.GetReference(typeof(IInterface_4), null); Assert.That(svc4.RefCount, Is.EqualTo(1)); Assert.That(svc4.Dependencies.Count, Is.EqualTo(3)); Assert.NotNull(GetDependency(svc4, typeof(IInjector))); Assert.NotNull(GetDependency(svc4, typeof(IInterface_2))); Assert.NotNull(GetDependency(svc4, typeof(IInterface_3))); svc3 = GetDependency(svc4, typeof(IInterface_3)); Assert.That(svc3.RefCount, Is.EqualTo(2)); Assert.That(svc3.Dependencies.Count, Is.EqualTo(3)); Assert.NotNull(GetDependency(svc3, typeof(IInterface_1))); Assert.NotNull(GetDependency(svc3, typeof(IInterface_2))); Assert.NotNull(GetDependency(svc3, typeof(IReadOnlyDictionary <string, object>), $"{ServiceContainer.INTERNAL_SERVICE_NAME_PREFIX}options")); // implicit fuggoseg svc2 = GetDependency(svc4, typeof(IInterface_2)); Assert.That(svc2.RefCount, Is.EqualTo(3)); Assert.That(svc2.Dependencies.Count, Is.EqualTo(1)); Assert.NotNull(GetDependency(svc2, typeof(IInterface_1))); svc1 = GetDependency(svc3, typeof(IInterface_1)); Assert.That(svc1.RefCount, Is.EqualTo(2)); Assert.That(svc1.Dependencies.Count, Is.EqualTo(1)); Assert.NotNull(GetDependency(svc1, typeof(IReadOnlyDictionary <string, object>), $"{ServiceContainer.INTERNAL_SERVICE_NAME_PREFIX}options")); // implicit fuggoseg return(new[] { svc1, svc2, svc3, svc4 }); IServiceReference GetDependency(IServiceReference reference, Type iface, string name = null) => reference.Dependencies.SingleOrDefault(dep => dep.RelatedServiceEntry.Interface == iface && dep.RelatedServiceEntry.Name == name); }
/// <summary> /// Gets the dependency graph in <a href="https://graphviz.org/">DOT graph</a> format. /// </summary> public static string GetDependencyGraph(this IInjector injector, Type serviceInterface, string?serviceName = null) { if (injector is null) { throw new ArgumentNullException(nameof(injector)); } return(injector .GetReference(serviceInterface, serviceName) .AsDotGraph() .ToString()); }