commandlineparser / commandlineparser/commandline

Load options dynamically by System.Type only working for verbs.

未關閉
#450 4 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
feature request
主要語言
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

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。