Initially, there's a single DefaultScope. That gives me the bootstrap to be able to load the program with an arg[0]. Subsequent windows use a new scope. Each Controller instance keeps track of the filename and the loaded contents.
For app-wide shutdown, I use a modified DefaultScope event that broadcasts to all open instances.