Double generic types and members with non-generic equivalents
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia esaminando l’API generica esistente ParseResult.GetValue e i costruttori di Option, usando come ambito gli overload basati su Type proposti. Confronta il pattern con l’API DI non generica, quindi verifica che le alternative supportino il caso d’uso AOT senza reflection mostrato, preservando al contempo il comportamento generico.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Examples
// In addition to these:
T? ParseResult.GetValue<T>(Option<T> option);
new Option<T>(string name, params string[] aliases);
// etc...
// Make it possible to call them like this:
object? ParseResult.GetValue(Option option, Type valueType);
new Option(Type valueType, string name, params string[] aliases);
This is somewhat similar to what we have in DI:
// We can add service like this:
services.AddSignleton<T>();
// Or this:
services.AddSingleton(Type serviceType);
Justification
I am making my own library that adds proper hosting API, making using System.CommandLine similar to any regular ASP.NET project.
For example:
Program.cs
app.MapCommand("foo", ([Option] FileInfo file) =>
{
foreach (string line in File.ReadLines(file.FullName))
Console.WriteLine(line);
});
ShellApplication.cs
public void MapCommand(string name, Delegate command)
{
RootCommand rootCommand = [];
ParameterInfo[] parameters = command.Method.GetParameters();
foreach (ParameterInfo parameterInfo in parameters)
{
if (parameterInfo.GetCustomAttribute<OptionAttribute>() is not null)
{
Option option = (typeof(Option<>).MakeGenericType(parameterInfo.ParameterType).GetConstructor([typeof(string), typeof(string[])])!.Invoke([name]) as Option)!;
rootCommand.Options.Add(option);
}
}
// etc...
}
At first glance this looks fine – just make a generic type using reflection. Only the problem is that this is not AOT compatible and will cause exceptions. Adding alternatives that accept types as parameters would solve this.
Additional context
I've glossed over the codebase, and it doesn't look like it will be that hard to implement changes. If that's ok with you, I can prepare a PR myself.
- Lingua principale
- C#
- Stelle
- 3.7k
- Fork
- 434
- Merge medio
- 4h 46m
- PR unite (30g)
- 1
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di dotnet/command-line-api
-
German localization is incompleteForse già presa @b-v-d-e-v l’ha presa 7 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
dotnet/command-line-api#2852 ·
-
Incomplete French (fr) translation: RequiredOptionWasNotProvided not translatedForse già presa @JPBlanc l’ha presa 105 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
dotnet/command-line-api#2822 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
dotnet/command-line-api#2792 · 2 commenti · 16 reazioni ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
dotnet/command-line-api#2704 ·
-
GetCompletions should check exit code of invoked applicationForse già presa @baradgur l’ha presa 1276 giorni fa. ApertaArea-Completions bug help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
dotnet/command-line-api#2137 · 1 commento · 3 reazioni ·
Tutte le issue di dotnet/command-line-api
Issue simili
-
type/automation type/tech-debt
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
High-DPI fixes for release/1.3: editor toolbar icons and Color Picker layout (patch included)Apertano-stack-trace
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
v9 review: TestingApertadocs/external squad/utforming
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Altinn/altinn-studio#21041 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
stryker-mutator/stryker-net#3892 ·
I maintainer di solito rispondono entro 1 giorno