-
Notifications
You must be signed in to change notification settings - Fork 0
Concept overriding
David Yates edited this page Jul 31, 2020
·
5 revisions
You can override any of the built in classes that are being registered in the ConsoleMenu.cs RegisterInternalDependencies method. Currently, it looks like this:
/// <summary>Register internal dependencies</summary>
/// <param name="collection">Service collection</param>
private void RegisterInternalDependencies(IServiceCollection collection)
{
collection.AddSingleton<IConsoleMenuRepository, ConsoleMenuRepository>();
collection.AddSingleton<IConsoleMenuController, ConsoleMenuController>();
collection.AddTransient<IExitConsoleMenuItem, ExitConsoleMenuItem>();
collection.AddTransient<IConsoleCommand, ConsoleCommand>();
collection.AddSingleton<IPromptHelper, PromptHelper>();
}
In your console program, you just have to do the following (see last line):
static void AddMyDependencies(IServiceCollection serviceCollection)
{
// IConfiguration requires: Microsoft.Extensions.Configuration NuGet package
// AddJsonFile requires: Microsoft.Extensions.Configuration.Json NuGet package
// https://stackoverflow.com/a/46437144/97803
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
IConfiguration config = builder.Build();
serviceCollection.AddSingleton<IConfiguration>(config);
serviceCollection.AddTransient<IAustinPowersMenuItem, AustinPowersMenuItem>();
// Overriding a built in component
serviceCollection.AddTransient<IExitConsoleMenuItem,ExitConsoleOverrideMenuItem>();
}
This works because I first register the dependencies of the ConsoleMenuHelper and then I you call AddMenuItemViaReflection on the ConsoleMenu object to register your dependencies; thus, overwriting what I setup.
var menu = new ConsoleMenu();
menu.AddDependencies(AddMyDependencies);
menu.AddMenuItemViaReflection(Assembly.GetExecutingAssembly());
await menu.DisplayMenuAsync("Hello1", "Main");