예제 #1
0
        public static void VisitSubkernels(
            this IKernel kernel,
            Action <IKernel> onVisit,
            bool recursive = false)
        {
            if (kernel == null)
            {
                throw new ArgumentNullException(nameof(kernel));
            }

            if (onVisit == null)
            {
                throw new ArgumentNullException(nameof(onVisit));
            }

            foreach (var subKernel in KernelHierarchy.GetChildren(kernel))
            {
                onVisit(subKernel);

                if (recursive)
                {
                    subKernel.VisitSubkernels(onVisit, recursive: true);
                }
            }
        }
예제 #2
0
        public static async Task VisitSubkernelsAsync(
            this IKernel kernel,
            Func <IKernel, Task> onVisit,
            bool recursive = false)
        {
            if (kernel == null)
            {
                throw new ArgumentNullException(nameof(kernel));
            }

            if (onVisit == null)
            {
                throw new ArgumentNullException(nameof(onVisit));
            }

            foreach (var subKernel in KernelHierarchy.GetChildren(kernel))
            {
                await onVisit(subKernel);

                if (recursive)
                {
                    await subKernel.VisitSubkernelsAsync(onVisit, true);
                }
            }
        }
예제 #3
0
        public static IKernel GetRoot(this IKernel kernel)
        {
            if (kernel == null)
            {
                throw new ArgumentNullException(nameof(kernel));
            }
            var root = KernelHierarchy.GetParent(kernel);

            while (root != null && KernelHierarchy.GetParent(root) != null)
            {
                {
                    root = KernelHierarchy.GetParent(root);
                }
            }

            return(root ?? kernel);
        }