Example #1
0
        private List <ExtractedModuleInfo> GetSortedModules()
        {
            var sortedModules = _engine.GetType().GetField("_dependencySortedList", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(_engine) as IList;
            var result        = new List <ExtractedModuleInfo>();

            // some nasty dirty internal business to get sorted module list with dependencies
            foreach (var module in sortedModules)
            {
                var t = module.GetType();

                // we cannot cast to `ModuleNode` as this is internal type. we have to blindly invoke property from the underlying type
                var moduleType   = t.GetProperty("ModuleType", BindingFlags.Instance | BindingFlags.Public).GetValue(module) as Type;
                var dependencies = t.GetProperty("Dependencies", BindingFlags.Instance | BindingFlags.Public).GetValue(module) as IEnumerable;

                var dependencyTypes = (from object dep in dependencies
                                       select dep as Type);

                result.Add(new ExtractedModuleInfo
                {
                    Type         = moduleType,
                    Dependencies = dependencyTypes.ToList()
                });
            }

            return(result);
        }