public void TouchedFileCausesRecomposition() { var ironpythonDir = "IronPythonCommands".AsNewDirectoryInfo(); @" @export(IItemSource) class StringItemSource(BasePythonItemSource): def GetAllItems(self): return [""Item 1"", ""Item 2"", ""Item 3""] ".WriteToFileInPath(ironpythonDir, "python.py"); var container = new CompositionContainer(new TypeCatalog(typeof(MockImporter))); var commands = new IronPythonCommandsMefExport(container, new DebugLogger()); commands.CoreConfiguration = new CoreConfiguration("data".AsNewDirectoryInfo().FullName, "."); commands.Configuration = new Configuration { ScriptDirectories = new List <string> { ironpythonDir.FullName } }; commands.Execute(); var importer = container.GetExportedValue <MockImporter>(); Assert.Equal(1, importer.ItemSources.Count()); var newCode = @" @export(IItemSource) class StringItemSource(BasePythonItemSource): def GetAllItems(self): return [""Item 1"", ""Item 2"", ""Item 3""] @export(IItemSource) class SecondStringItemSource(BasePythonItemSource): def GetAllItems(self): return [""Item 1"", ""Item 2"", ""Item 3""] "; EventHelper.WaitForEvent(e => commands.RefreshedFiles += e, e => commands.RefreshedFiles -= e, () => newCode.WriteToFileInPath(ironpythonDir, "python.py")); importer = container.GetExportedValue <MockImporter>(); Assert.Equal(2, importer.ItemSources.Count()); }