Sure, you'd just need something to bind those to a UI - I'll take an easy way out and assume a form with a single textbox. Depending on your requirements, a PropertyInfo grid or something may be more appropriate.
Something like:
class PluginUIBuilder {
public void Fill(IPluginSystem p) {
var t = ((object)p).GetType();
foreach (var pi in t.GetProperties()) {
if (pi.GetCustomAttributes(typeof(ExternalInput), true).Length > 0) {
string value = Prompt(pi.Name);
pi.SetValue(p, value, null);
}
}
}
string Prompt(string name) {
using (var f = new InputForm()) {
f.Prompt = "Enter a value for " + name;
if (f.ShowDialog() = DialogResult.OK) {
return f.Value;
}
return null;
}
}
}
// client code
var p = new MyPlugin();
var ui = new PluginUIBuilder();
ui.Fill(p);
p.Execute();
You'll probably want to add properties to your attribute for things like descriptions, a convert function or class (may want to leverage the builtin type converters), validation, etc.
At the end of the day, if you take this too far - you've just built the WinForm design surface. But, I've used Property Info grids for prompts for otherwise command line apps to decent success with very little code.