コード例 #1
0
        private async Task <IBuildServerAdapter> GetBuildServerAdapterAsync()
        {
            await TaskScheduler.Default;

            var buildServerSettings = _module().EffectiveSettings.BuildServer;

            if (!buildServerSettings.EnableIntegration.Value)
            {
                return(null);
            }

            var buildServerType = buildServerSettings.Type.Value;

            if (string.IsNullOrEmpty(buildServerType))
            {
                return(null);
            }

            var exports = ManagedExtensibility.GetExports <IBuildServerAdapter, IBuildServerTypeMetadata>();
            var export  = exports.SingleOrDefault(x => x.Metadata.BuildServerType == buildServerType);

            if (export is not null)
            {
                try
                {
                    var canBeLoaded = export.Metadata.CanBeLoaded;
                    if (!string.IsNullOrEmpty(canBeLoaded))
                    {
                        Debug.Write(export.Metadata.BuildServerType + " adapter could not be loaded: " + canBeLoaded);
                        return(null);
                    }

                    var buildServerAdapter = export.Value;

                    buildServerAdapter.Initialize(this, buildServerSettings.TypeSettings,
                                                  () =>
                    {
                        // To run the `StartSettingsDialog()` in the UI Thread
                        _revisionGrid.Invoke((Action)(() =>
                        {
                            _revisionGrid.UICommands.StartSettingsDialog(typeof(BuildServerIntegrationSettingsPage));
                        }));
                    }, objectId => _revisionGrid.GetRevision(objectId) is not null);
                    return(buildServerAdapter);
                }
                catch (InvalidOperationException ex)
                {
                    Debug.Write(ex);

                    // Invalid arguments, do not return a build server adapter
                }
            }

            return(null);
        }