> My main issue with this choice is that if something unexpected happen during initialization, we will miss a chance of cleaning stuff during unload and let buggy UI and leaks...

I see your point, but think if it differently if setup fails then exception is thrown and there is no real instance to be disposed. Or put it differently if `setup` throws than it has failed to do UI changes or storing references to these, trying to undo what we failed to do in first place is very likely to fail too. This also matches how our APIs were doing things. Unload handler was last thing in the init logic.