static public async Task <Node> EvaluateAsync( string hl, FileService fileService = null, FolderService folderService = null, StreamService streamService = null) { var services = Initialize(fileService, folderService, streamService); var lambda = new Parser(hl).Lambda(); var signaler = services.GetService(typeof(ISignaler)) as ISignaler; await signaler.SignalAsync("eval", lambda); return(lambda); }
static IServiceProvider Initialize( FileService fileService = null, FolderService folderService = null, StreamService streamService = null) { var configuration = new ConfigurationBuilder().Build(); var services = new ServiceCollection(); services.AddTransient <IConfiguration>((svc) => configuration); services.AddTransient <ISignaler, Signaler>(); if (fileService == null) { services.AddTransient <IFileService, file.services.FileService>(); } else { services.AddTransient <IFileService>(svc => fileService); } if (folderService == null) { services.AddTransient <IFolderService, folder.services.FolderService>(); } else { services.AddTransient <IFolderService>(svc => folderService); } if (streamService == null) { services.AddTransient <IStreamService, stream.services.StreamService>(); } else { services.AddTransient <IStreamService>(svc => streamService); } services.AddTransient <IRootResolver, RootResolver>(); var types = new SignalsProvider(InstantiateAllTypes <ISlot>(services)); services.AddTransient <ISignalsProvider>((svc) => types); var provider = services.BuildServiceProvider(); return(provider); }