public MainWindow()
        {
            InitializeComponent();

            var configurationDictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(File.ReadAllText("configuration.json"));

            var configurationReader = new ToastrConfigurationReader();
            var configuration = configurationReader.Get(configurationDictionary);

            var actionsExecutor = new ActionsExecutor(Dispatcher);
            _controller = new NotificationsController(
                (uint)SystemParameters.PrimaryScreenWidth,
                (uint)SystemParameters.PrimaryScreenHeight,
                actionsExecutor,
                configuration,
                (notification, config) =>
                {
                    var notificationWindow = new NotificationWindow(notification, config);
                    notificationWindow.Show();
                    return notificationWindow;
                });

            Closing += (sender, args) =>
            {
                actionsExecutor.Dispose();
            };
        }
 public NotificationsController(uint desktopWidth, uint desktopHeight, ActionsExecutor actionsExecutor, IToastrConfiguration configuration, Func<Notification, IToastrConfiguration, INotificationWindow> windowCreator)
 {
     if (actionsExecutor == null) throw new ArgumentNullException(nameof(actionsExecutor));
     if (configuration == null) throw new ArgumentNullException(nameof(configuration));
     _actionsExecutor = actionsExecutor;
     _configuration = configuration;
     _windowCreator = windowCreator;
     _positionCalculator = PositionCalculatorFactory.GetCalculator(desktopWidth, desktopHeight, configuration.HorizontalOffset, configuration.VerticalOffset, configuration.Width, configuration.PositionClass);
 }