public DataProcessorWorkspacePanelItemController(IDataProcessor dataProcessor, WorkspacePanelItem view) : base(view)
        {
            DataProcessor     = dataProcessor;
            DataProcessorInfo = new DataProcessorInfo(dataProcessor);

            dataProcessor.Updated += UpdateView;
        }
        public void SetData(object data)
        {
            var dataProcessor = data as IDataProcessor;

            _dataProcessor     = dataProcessor ?? throw new InvalidOperationException($"Аргумент {nameof(data)} должен наследовать интерфейс {nameof(IDataProcessor)}");
            _dataProcessorInfo = new DataProcessorInfo(dataProcessor);
            _dataProcessor.Awake();

            if (_dataProcessorInfo.Outputs.Count > 1)
            {
                throw new NotImplementedException();
            }

            var output = _dataProcessorInfo.Outputs.Single();

            _outputDataRenderer = DataRendererUtil.GetRendererFor(output.Type);
            _outputDataRenderer.OnUpdateRequest       += RequestUpdate;
            _outputDataRenderer.UpdateControlsRequest += () => UpdateControlsRequest?.Invoke();

            var outputObject = output.Get();

            if (outputObject != null)
            {
                _outputDataRenderer.SetData(outputObject);
            }

            _dataProcessor.Updated += DataProcessorUpdated;
        }
        public void Dispose()
        {
            _outputDataRenderer?.Dispose();
            _outputDataRenderer = null;

            if (_dataProcessor != null)
            {
                _dataProcessor.Updated -= DataProcessorUpdated;
            }

            _dataProcessor     = null;
            _dataProcessorInfo = null;
        }