ln.application/ln.application/FieldArgument.cs

50 lines
1.8 KiB
C#

using System.Reflection;
using ln.type;
namespace ln.application
{
public class FieldArgument : IArgument
{
public FieldInfo FieldInfo { get; }
public object Instance { get;}
public FieldArgument(FieldInfo fieldInfo)
:this(null, fieldInfo, fieldInfo.GetCustomAttribute<StaticArgumentAttribute>())
{}
public FieldArgument(object instance,FieldInfo fieldInfo)
:this(instance, fieldInfo, fieldInfo.GetCustomAttribute<StaticArgumentAttribute>())
{}
public FieldArgument(FieldInfo fieldInfo, StaticArgumentAttribute staticArgumentAttribute)
:this(null,fieldInfo,staticArgumentAttribute){}
public FieldArgument(object instance,FieldInfo fieldInfo, StaticArgumentAttribute staticArgumentAttribute)
{
FieldInfo = fieldInfo;
OptionName = staticArgumentAttribute?.Option ?? (char)0;
LongOptionName = staticArgumentAttribute?.LongOption ?? fieldInfo.Name;
HelpString = staticArgumentAttribute?.HelpString ?? "";
HasArgument = fieldInfo.FieldType != typeof(bool);
Instance = instance;
}
public char OptionName { get; }
public string LongOptionName { get; }
public bool HasArgument { get; }
public string HelpString { get; }
public string Value
{
get => FieldInfo.GetValue(Instance)?.ToString();
set
{
if (HasArgument)
{
FieldInfo.SetValue(Instance, Cast.To(value, FieldInfo.FieldType));
}
else
{
FieldInfo.SetValue(Instance, true);
}
}
}
}
}