public override async Task <ResourceElement> GetCapabilityStatementOnStartup(CancellationToken cancellationToken = default(CancellationToken)) { if (_listedCapabilityStatement == null) { await _defaultCapabilitySemaphore.WaitAsync(cancellationToken); try { if (_listedCapabilityStatement == null) { _builder = CapabilityStatementBuilder.Create(_modelInfoProvider, _searchParameterDefinitionManager, _supportedProfiles) .Apply(x => { x.FhirVersion = _modelInfoProvider.SupportedVersion.ToString(); x.Software = new SoftwareComponent { Name = Resources.ServerName, Version = Assembly.GetExecutingAssembly().GetName().Version.ToString(), }; }); using (IScoped <IEnumerable <IProvideCapability> > providerFactory = _capabilityProviders()) { foreach (IProvideCapability provider in providerFactory.Value) { provider.Build(_builder); } } foreach (Action <ListedCapabilityStatement> postConfiguration in _configurationUpdates) { _builder.Apply(statement => postConfiguration(statement)); } _listedCapabilityStatement = _builder.Build().ToResourceElement(); } } finally { _configurationUpdates.Clear(); _defaultCapabilitySemaphore.Release(); } } return(_listedCapabilityStatement); }
public override async Task <ResourceElement> GetCapabilityStatementOnStartup(CancellationToken cancellationToken = default(CancellationToken)) { if (_listedCapabilityStatement == null) { await _defaultCapabilitySemaphore.WaitAsync(cancellationToken); try { if (_listedCapabilityStatement == null) { _builder = CapabilityStatementBuilder.Create(_modelInfoProvider, _searchParameterDefinitionManager, _configuration, _supportedProfiles); using (IScoped <IEnumerable <IProvideCapability> > providerFactory = _capabilityProviders()) { foreach (IProvideCapability provider in providerFactory.Value) { provider.Build(_builder); } } foreach (Action <ListedCapabilityStatement> postConfiguration in _configurationUpdates) { _builder.Apply(statement => postConfiguration(statement)); } _listedCapabilityStatement = _builder.Build().ToResourceElement(); } } finally { _configurationUpdates.Clear(); _defaultCapabilitySemaphore.Release(); } } return(_listedCapabilityStatement); }