ConsoleAsksFor.Microsoft.DependencyInjection
1.0.0-prerelease-20211003103006
See the version list below for details.
dotnet add package ConsoleAsksFor.Microsoft.DependencyInjection --version 1.0.0-prerelease-20211003103006
NuGet\Install-Package ConsoleAsksFor.Microsoft.DependencyInjection -Version 1.0.0-prerelease-20211003103006
<PackageReference Include="ConsoleAsksFor.Microsoft.DependencyInjection" Version="1.0.0-prerelease-20211003103006" />
paket add ConsoleAsksFor.Microsoft.DependencyInjection --version 1.0.0-prerelease-20211003103006
#r "nuget: ConsoleAsksFor.Microsoft.DependencyInjection, 1.0.0-prerelease-20211003103006"
// Install ConsoleAsksFor.Microsoft.DependencyInjection as a Cake Addin #addin nuget:?package=ConsoleAsksFor.Microsoft.DependencyInjection&version=1.0.0-prerelease-20211003103006&prerelease // Install ConsoleAsksFor.Microsoft.DependencyInjection as a Cake Tool #tool nuget:?package=ConsoleAsksFor.Microsoft.DependencyInjection&version=1.0.0-prerelease-20211003103006&prerelease
ConsoleAsksFor
ConsoleAsksFor is library for asking for input in a console app easily.
Goal
The aim of ConsoleAsksFor removing hassle of retrieving input in a console app without manually having to parse or to retry when invalid.
Installation
You can download the latest release / pre-release NuGet packages from nuget:
Setup
Register Console with ConsoleAsksFor.Microsoft.DependencyInjection:
services.AddConsoleAsksFor();
Resolve a service which has dependency on IConsole of resolve service directly:
var console = serviceProvider.GetRequiredService<IConsole>();
Or create with factory:
ConsoleFactory.Create();
Start using
Some examples:
var isSure = await console.AskForBool("Are you sure?");
var age = await console.AskForInt("What is your age?", Between(0, 125));
var length = await console.AskForDecimal("What is your length (in meters)?", DecimalPrecision.Two, Between(0m, 2.5m));
var appointmentStart = await console.AskForDateTimeOffset("How late should we meet?", TimeZoneInfo.Local, AtLeast(DateTimeOffset.Now), defaultValue: DateTimeOffset.Now.AddHours(1));
var favoriteColor = await console.AskForEnum<ConsoleColor>("What is your favorite color?");
var preferredName = await console.AskForItem("Which name do you prefer?", new[] { "Jantje", "Pietje" });
var directory = await console.AskForExistingDirectory("Where to store file?", defaultValue: new DirectoryInfo(@"C:\Temp"));
var name = await console.AskForString("What is your name?");
var zipcode = await console.AskForString("What is your Dutch zipcode?", new Regex("^[1-9][0-9]{3}[A-Z]{2}$"), "Format: '5555AA' where first digit is not a 0");
var pw = await console.AskForPassword("What is the secret code?");
Demo
Features
- Default values
- History
- ByQuestionTextAndType (default)
- ByQuestionType
- NotFiltered
- Basic Intellisense
- Colors
- Visual feedback whether current answer is correct
- Different colors for different line types
- Customizable
- Basic multithreading support:
- During asking questions other output to Console is suspended
- When multiple treads are asking questions, questions are queued
Supported types
ConsoleAsksFor
- AskForBool
- AskForByte
- AskForSignedByte
- AskForShort
- AskForUnsignedShort
- AskForInt
- AskForUnsignedInt
- AskForLong
- AskForUnsignedLong
- AskForDecimal
- AskForDate
- AskForDateTime
- AskForDateTimeOffset
- AskForDirectory
- AskForExistingDirectory
- AskForNewDirectory
- AskForFileName
- AskForExistingFileName
- AskForNewFileName
- AskForEnum<T>
- AskForFlaggedEnum<T>
- AskForItem<T>
- AskForItems<T>
- AskForString
- AskForPassword
ConsoleAsksFor.NodaTime.ISO
- AskForInstant
- AskForLocalDate
- AskForLocalDateTime
- AskForLocalTime
- AskForZonedDateTime
- AskForAnnualDate
- AskForYearMonth
Release notes
See the Releases page ConsoleAsksFor for release history.
Versioning
ConsoleAsksFor follows Semantic Versioning 2.0.0 for the releases published to nuget.org.
Credits
- Sergey Shumov for his AsyncAutoResetEvent gist.
- Jerrie Pelser for showing how to enable ansi colors in windows.
- JSQuareD for showing how to cancel Console.ReadKey.
- Sergey for showing how to lock resource in combination with async/await.
Other
Another reason to make ConsoleAsksFor is because I have never worked with github and never created public nuget package. So this is a little brain exercise I guess 😃.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net5.0
- ConsoleAsksFor (>= 1.0.0-prerelease-20211003103006)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 5.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
4.0.0 | 72 | 11/3/2024 |
3.1.0 | 309 | 12/27/2022 |
3.0.0 | 422 | 5/10/2022 |
2.0.0 | 260 | 12/31/2021 |
2.0.0-prerelease-2021123111... | 148 | 12/31/2021 |
1.0.0 | 354 | 10/4/2021 |
1.0.0-prerelease-2021100310... | 279 | 10/3/2021 |