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);
}
}
}
}