示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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
            });
        }