private void BindArgument(string name, object value, Type type)
{
Type memberType = null;
// Look for Property to bind to
MemberInfo memberInfo = Command.GetType().GetProperty(name, type);
if (memberInfo != null)
{
memberType = ((PropertyInfo)memberInfo).PropertyType;
}
else // No property found try bind to field instead
{
memberInfo = Command.GetType().GetField(name);
if (memberInfo != null)
{
memberType = ((FieldInfo)memberInfo).FieldType;
}
else
{
throw new Exception("Unable to get field or property named: " + name);
}
}
// TODO: make this generic
if (memberType == typeof(PSObject[]))
{
SetValue(memberInfo, Command, new[] { PSObject.AsPSObject(value) });
}
else if (memberType == typeof(String[]))
{
SetValue(memberInfo, Command, new[] { value.ToString() });
}
else if (memberType == typeof(String))
{
SetValue(memberInfo, Command, value.ToString());
}
else if (memberType == typeof(PSObject))
{
SetValue(memberInfo, Command, PSObject.AsPSObject(value));
}
else if (memberType == typeof(SwitchParameter))
{
SetValue(memberInfo, Command, new SwitchParameter(true));
}
else if (memberType == typeof(Object[]))
{
SetValue(memberInfo, Command, new[] { value });
}
else
{
SetValue(memberInfo, Command, value);
}
}