private void SetModelViewInstances(int state) { (Type ModelType, Type ViewType)stateInformation = _stateHandler.GetStateInformation(state); if (stateInformation.ViewType.GetConstructor(new[] { typeof(IViewRegistry) }) != null) { _view = (IView)Activator.CreateInstance(stateInformation.ViewType, _viewRegistry); } else { _view = (IView)Activator.CreateInstance(stateInformation.ViewType); } _view.GameWindowEvent += GameWindowEvent; IModel existingModel = (from inactiveModel in _inactiveModels where inactiveModel.GetType() == stateInformation.ModelType select inactiveModel).FirstOrDefault(); if (existingModel != null) { _model = existingModel; _inactiveModels.Remove(existingModel); } else { if (stateInformation.ModelType.GetConstructor(new[] { typeof(IModelRegistry) }) != null) { _model = (IModel)Activator.CreateInstance(stateInformation.ModelType, _modelRegistry); } else { _model = (IModel)Activator.CreateInstance(stateInformation.ModelType); } _model.ModelEvent += (sender, e) => _view.ProcessModelEvent(e); _model.StateChanged += StateChanged; } _app.ResourceManager.ShaderChanged += _view.ShaderChanged; _view.LoadResources(_app.ResourceManager); }