MenuCLI
Official Release
이 라이브러리의 목적은 사용자 제어의 기본 사항을 처리하여 콘솔 앱 도구 생성을 크게 단순화하고 비즈니스 가치에 집중할 수 있도록 하는 것입니다.
여기서 초점은 효율성과 단순성입니다. 이것은 ASCII 아트로 복잡한 대시보드를 그리는 라이브러리가 아닙니다.
[ Menu ( "This is a title" , Description = "This is an optional description" ) ]
public class MainMenu
{
[ Choice ( "This is the display text of the first choice" ) ]
public void Choice1 ( )
{
Console . WriteLine ( "Hello world !" ) ;
}
[ Choice ( "This is the display text of the second choice" ) ]
public void Choice2 ( )
{
Console . WriteLine ( "Goodbye world !" ) ;
}
}
using IHost host = Host . CreateDefaultBuilder ( args )
. ConfigureServices ( ( _ , services ) =>
{
services . AddMenuCLI < MainMenu > ( ) ;
} )
. Build ( ) ;
await host . Services . StartMenu ( ) ;
다음과 같이 앱에 하위 메뉴를 추가할 수 있습니다.
[ Menu ( "Submenu title" ) ]
public class SubMenu
{
[ Choice ( "This is the display text of the first choice" ) ]
public void Choice1 ( )
{
Console . WriteLine ( "Hello world !" ) ;
}
}
[ Choice ( "Sub Menu" , typeof ( SubMenu ) ) ]
public void Choice1 ( )
{
Console . WriteLine ( "Doing things..." ) ;
Thread . Sleep ( 1000 ) ;
}
앱은 Choice1의 콘텐츠를 실행한 다음 SubMenu로 리디렉션합니다.
라이브러리는 다음과 같이 비동기 호출을 처리할 수 있습니다.
[ Choice ( "Async choice" ) ]
public async Task Choice2 ( )
{
Console . WriteLine ( "Doing async things..." ) ;
await Task . Delay ( 3000 ) ;
}
라이브러리를 사용하면 콜백 결과에 따라 하위 메뉴를 구성할 수 있습니다.
[ Choice ( "Dynamic Menu" ) ]
public void Choice3 ( [ Menu ( "Dynamic Menu" , Description = "This is a generated menu from a callback" ) ] Menu menu )
{
var random = new Random ( ) ;
var choiceNumber = random . Next ( 9 ) ;
for ( int i = 0 ; i < choiceNumber + 1 ; i ++ )
{
menu . AddMenuChoice ( $ "Choice Id { Guid . NewGuid ( ) } " , ( ) => Console . WriteLine ( "What a choice !" ) ) ;
}
}
종속성 주입은 여전히 작동하지만 예상한 대로 작동하지 않을 수도 있습니다. 선택한 콜백 메소드는 레지스터 클래스와 동일한 컨텍스트에서 실행됩니다. 더 자세한 내용은 샌드박스 예제를 자세히 살펴보세요.
모든 메뉴 클래스는 의존성 주입으로 해결되므로 여러분도 사용하실 수 있습니다! (자세한 예는 샌드박스 프로젝트를 참조하세요)
Console.ReadKey()
건너뛰고 사용자 시퀀스를 테스트하려면 다음 예와 같이 선택적 매개변수를 사용하여 메뉴를 시작하세요.
await host . Services . StartMenu ( true ) ;
Tests
프로젝트에서 E2E 테스트의 실제 예를 볼 수 있습니다.
콜백 반환, 진행률 표시줄 처리 및 메뉴 클래스의 지연 로드(현재 앱의 부트스트랩에서 열심히 로드됨)에 따라 더 복잡한 하위 메뉴 리디렉션과 같은 더 많은 작업이 계획되어 있습니다.