public static bool TryGetStartupSettings( string functionDirectory, out DasyncFunctionStartupSettings settings) { var dasyncStartupFilePath = Path.Combine(functionDirectory, "dasync.startup.json"); if (!File.Exists(dasyncStartupFilePath)) { settings = null; return(false); } var startupJson = File.ReadAllText(dasyncStartupFilePath); if (string.IsNullOrEmpty(startupJson)) { settings = null; return(false); } settings = JsonConvert.DeserializeObject <DasyncFunctionStartupSettings>(startupJson); if (!string.IsNullOrEmpty(settings.StartupFile)) { settings.StartupFile = Path.GetFullPath(Path.Combine(functionDirectory, settings.StartupFile)); } return(true); }
private static StartupInfo LoadStartupType(DasyncFunctionStartupSettings settings) { if (string.IsNullOrEmpty(settings.StartupFile)) { return(null); } var startupAssembly = LoadAssembly(settings.StartupFile); var result = new StartupInfo { StartupAssembly = startupAssembly }; return(result); }
private static async Task <InitializedRuntime> InitializeRuntimeAsync( DasyncFunctionStartupSettings startupSettings, FunctionExecutionContext context, ILogger logger) { var startupInfo = LoadStartupType(startupSettings); var engineIocContainer = TryCreateEngineIocContainer(startupInfo); if (engineIocContainer == null) { engineIocContainer = CreateDefaultEngineIocContainer( context.FunctionDirectory, Path.Combine(context.FunctionDirectory, "..", "bin")); } if (startupInfo?.StartupAssembly != null) { var appIocContainerProviderHolder = engineIocContainer .Resolve <AppIocContainerProviderProxy.Holder>(); appIocContainerProviderHolder.Provider = new LazyAppIocContainerProvider(() => { var converters = engineIocContainer.Resolve <ContainerConverters>().Converters; return(TryCreateAppIocContainer(startupInfo.StartupAssembly, converters)); }); } var settings = engineIocContainer.Resolve <AzureFunctionsFabricSettings>(); settings.FunctionsDirectory = Path.GetFullPath(Path.Combine(context.FunctionDirectory, "..")); var bootstrapper = engineIocContainer.Resolve <Bootstrapper>(); var bootstrapResult = await bootstrapper.BootstrapAsync(CancellationToken.None); return(new InitializedRuntime { EngineIocContainer = engineIocContainer, Fabric = (IAzureFunctionsFabric)bootstrapResult.Fabric }); }