bing-search-sdk-for-net/samples/BingSearchSamples/BingVisualSearch/Program.cs

100 строки
3.4 KiB
C#

namespace Microsoft.Bing.VisualSearch.Samples
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
class Program
{
static IDictionary<string, ExampleAbstraction> SampleMap = null;
const string Separator = "--------------------------------------------------";
static void Main(string[] args)
{
do
{
/*
* Decide which sample to showcase
*/
Console.WriteLine("Hi! Welcome to Visual Search Samples");
if (SampleMap == null)
{
LoadSampleOptions();
}
ExampleAbstraction examples;
var input = "VisualSearch";
if (!SampleMap.TryGetValue(input, out examples) || examples?.Examples?.Count == 0)
{
Console.WriteLine("Sorry, \"{0}\" doesn't seem to be a valid sample.", input);
continue;
}
/*
* Decide which example from the sample to showcase
*/
Console.WriteLine("Ok. Now, pick the number corresponding to an example you'd like to run: ");
Console.WriteLine(Separator);
for (var i = 0; i < examples.Examples.Count; i++)
{
Console.WriteLine(i + ": " + examples.Examples[i].Description);
}
Console.WriteLine(Separator);
input = Console.ReadLine();
int exampleIndex;
if (!int.TryParse(input, out exampleIndex) || exampleIndex < 0 || exampleIndex >= examples.Examples.Count)
{
Console.WriteLine("Sorry, \"{0}\" is not a valid example number.", input);
continue;
}
Console.WriteLine("Ok, now please enter your subscription key:");
input = Console.ReadLine();
Console.WriteLine("Ok, running example {0} with subscription key \"{1}\"", exampleIndex, input);
Console.WriteLine(Separator);
examples.Examples[exampleIndex].Invoke(input);
} while (DecideRetry());
}
/// <summary>
/// Reflects through the assembly to find which samples can be explored
/// </summary>
private static void LoadSampleOptions()
{
SampleMap = new Dictionary<string, ExampleAbstraction>();
var samples = Assembly.GetEntryAssembly().DefinedTypes.Where(type => type.GetCustomAttribute<SampleCollectionAttribute>() != null);
foreach (var sample in samples)
{
var sampleImpl = new ExampleAbstraction(sample);
sampleImpl.Load();
SampleMap.Add(sample.GetCustomAttribute<SampleCollectionAttribute>().SampleName, sampleImpl);
}
}
/// <summary>
/// Asks the user whether they should continue and look for another sample, or quit
/// </summary>
/// <returns></returns>
private static bool DecideRetry()
{
Console.WriteLine();
Console.WriteLine("Would you like to look at another example (ENTER) or would you like to quit (q or CTRL+C)?");
return Console.ReadKey().KeyChar != 'q';
}
}
}