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;
        }
        private void DataProcessorUpdated()
        {
            var newOutput = _dataProcessorInfo.Outputs.Single().Get();

            if (newOutput != _outputDataRenderer.GetData())
            {
                _outputDataRenderer.SetData(newOutput);
                _outputDataRenderer.Update();
                RequestUpdate();
            }
        }