private void SetOutputs()
        {
            foreach (var output in _outputs)
            {
                var property = PluginOutput.ToNonGeneric(output.GetValue(this));

                if (property.HasValue)
                {
                    Context.OutputParameters[StringValueAttributeReader.GetFirstValueOrName(output)] = property.Value;
                }
            }
        }
        private void InitializeParameters()
        {
            foreach (var input in GetInputs())
            {
                var pluginInput = new PluginInput(Context, StringValueAttributeReader.GetFirstValueOrName(input));
                input.SetValue(this, pluginInput.ToGeneric(input.FieldType.GetGenericArguments().Single()));
            }

            foreach (var output in _outputs)
            {
                var pluginOutput = new PluginOutput();
                output.SetValue(this, pluginOutput.ToGeneric(output.FieldType.GetGenericArguments().Single()));
            }

            foreach (var preImage in GetPreImages())
            {
                preImage.SetValue(this, new PluginPreImage(Context, StringValueAttributeReader.GetFirstValueOrName(preImage)));
            }

            foreach (var postImage in GetPostImages())
            {
                postImage.SetValue(this, new PluginPostImage(Context, StringValueAttributeReader.GetFirstValueOrName(postImage)));
            }
        }