private void onCloseWindow(ExmWindow target)
    {
        ExmWindowChange change = ChangeDispatcher <ExmWindowChange> .GetChange();

        change.target = target;
        dispatcher.dispatchChange(change, ExmWindowChangeType.WINDOW_CLOSED);

        //...
    }
    void Start()
    {
        ExmWindowsManager.instance.dispatcher.addChangeListener(ExmWindowChangeType.WINDOW_OPENED, onSomeWindowOpen);
        ExmWindowsManager.instance.dispatcher.addChangeListener(ExmWindowChangeType.WINDOW_CLOSED, onSomeWindowClose);

        ChangeDispatcher <ExmWindowChange> myDispatcher = new ChangeDispatcher <ExmWindowChange>();

        myDispatcher.addRedispatch(ExmWindowsManager.instance.dispatcher, ExmWindowChangeType.WINDOW_OPENED); //myDispatcher будет редиспатчить все пойманные события  WINDOW_OPENED
    }
    public void openWindow(string title, string message)
    {
        ExmWindow w = createWindow();

        w.setData(title, message, onCloseWindow);

        //...

        ExmWindowChange change = ChangeDispatcher <ExmWindowChange> .GetChange();

        change.target = w;
        dispatcher.dispatchChange(change, ExmWindowChangeType.WINDOW_OPENED);
    }