Bari.Console.Program.GetModuleGraph C# (CSharp) Method

GetModuleGraph() private static method

private static GetModuleGraph ( string path, string pattern ) : IEnumerable>
path string
pattern string
return IEnumerable>
        private static IEnumerable<EquatableEdge<INinjectModule>> GetModuleGraph(string path, string pattern)
        {
            var instanceCache = new Dictionary<Type, INinjectModule>();

            foreach (var file in Directory.GetFiles(path, pattern))
            {
                var assembly = Assembly.LoadFile(file);
                var modules = from type in assembly.GetTypes()
                              where type.GetInterfaces().Contains(typeof(INinjectModule))
                              select type;

                foreach (var module in modules)
                {
                    var instance = CreateModuleInstance(module, instanceCache);

                    yield return new EquatableEdge<INinjectModule>(instance, instance);

                    var deps = module.GetCustomAttributes(typeof (DependsOnAttribute), false).Cast<DependsOnAttribute>();
                    foreach (var dep in deps)
                    {
                        var dependentInstance = CreateModuleInstance(dep.DependentModuleType, instanceCache);
                        yield return new EquatableEdge<INinjectModule>(dependentInstance, instance);
                    }
                }
            }
        }