50 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |