commandlineparser / commandlineparser/commandline
Load options dynamically by System.Type only working for verbs.
- 主要語言
- C#
- 星號
- 4.8k
- 分支
- 478
- PR 合併指標
- 30 天內沒有已合併 PR
描述
I have an architecture where first, an Options base class is parsed and based on one parameter, I need to parse specific Options. These Options are loaded dynamically and since they are loaded dynamically, I can't use the generic method overloads of ParseArguments and the overload with params System.Type[] types, works only for verbs?. This once simple and goal oriented Library, unfortunately became unnecessary complex.
In Version 1.x I could pass the specific instance e.g. MyClassOptions and it would parse just fine.
```cs
using System;
using System.Collections.Generic;
using System.Linq;
using CommandLine;
namespace CmdTest
{
class Program
{
static void Main(string[] args)
{
// args = -c MyClassOptions -s mySpecificOption
//....
// First Parse base options, load specific options depending on parameter of this instance.
// Parse specific options while using type from reflection.
//....
Parser parser = new Parser(with => with.IgnoreUnknownArguments = true);
var result = parser.ParseArguments(args, typeof(MyClassOptions)).
MapResult(x => x, NotParsedFunc);
MyClassOptions options = (MyClassOptions) result;
// Not working, because the public ParserResult ParseArguments(IEnumerable args, params Type[] types);
// overload only parses verbs now...
Console.WriteLine(options.SpecificOption);
}
private static object NotParsedFunc(IEnumerable arg)
{
throw new Exception(arg.First().Tag.ToString()); // Exception is thrown
}
public class OptionsBase
{
[Option('c', "class", Required = true, HelpText = "Class that should be loaded dynamically.")]
public string Classname { get; set; }
}
public class MyClassOptions : OptionsBase
{
[Option('s', "specificoption", Required = true, HelpText = "Specific Option for my class to load.")]
public string SpecificOption { get; set; }
}
}
}
```
貢獻指南
這個儲存庫沒有索引到貢獻指南
研究方向
從 Parser.ParseArguments(IEnumerable, params Type[]) 開始,並將其處理方式與 verb parsing 進行比較。使用 OptionsBase 和 MyClassOptions 重現範例,然後驗證動態提供的型別是否如預期解析繼承的選項和特定選項。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- csharp
- 領域
- cli
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 需要釐清
- 新手友好度
- 25/100