示例#1
0
        private async Task <InstallResult> InstallAsync(List <TemplatePackageData> packages, InstallRequest installRequest, IInstaller installer, CancellationToken cancellationToken)
        {
            _ = installRequest ?? throw new ArgumentNullException(nameof(installRequest));
            _ = installer ?? throw new ArgumentNullException(nameof(installer));

            (InstallerErrorCode result, string message) = await EnsureInstallPrerequisites(
                packages,
                installRequest.PackageIdentifier,
                installRequest.Version,
                installer,
                cancellationToken,
                forceUpdate : installRequest.Force).ConfigureAwait(false);

            if (result != InstallerErrorCode.Success)
            {
                return(InstallResult.CreateFailure(installRequest, result, message));
            }

            InstallResult installResult = await installer.InstallAsync(installRequest, this, cancellationToken).ConfigureAwait(false);

            if (!installResult.Success)
            {
                return(installResult);
            }
            if (installResult.TemplatePackage is null)
            {
                throw new InvalidOperationException($"{nameof(installResult.TemplatePackage)} cannot be null when {nameof(installResult.Success)} is 'true'");
            }

            lock (packages)
            {
                packages.Add(((ISerializableInstaller)installer).Serialize(installResult.TemplatePackage));
            }
            return(installResult);
        }