public void InOrderTo(string description) { var technology = string.Join(" over ", _connectorTechnologies); ContainerWithInfrastructure usageTarget = _usedContainer; ContainerWithInfrastructure usageSource = _usingContainer; if (_direction == UsageDirection.ToUsingContainer) { usageTarget = _usingContainer; usageSource = _usedContainer; } if (!string.IsNullOrWhiteSpace(technology)) { usageSource.Container.Uses(usageTarget.Container, description, technology); } else { usageSource.Container.Uses(usageTarget.Container, description); } var connector = _containerConnector ?? _usedContainer as IContainerConnector ?? _usedContainer.Infrastructure as IContainerConnector ?? _usingContainer as IContainerConnector ?? _usingContainer.Infrastructure as IContainerConnector; connector?.Connect(_usingContainer, _usedContainer); }
public static IConfigurable GetConfigurable(ContainerWithInfrastructure container, bool failIfNoTarget = true) { var configurable = container.Infrastructure as IConfigurable ?? container as IConfigurable; if (configurable == null && failIfNoTarget) { throw new InvalidOperationException( "When using connector classes, the using container has to have an infrastructure implementing the IConfigurable interface or implement IConfigurable itself. I did not figure out an easy way yet to check this at compile time..."); } return(configurable); }
public void Connect <TUsing, TUsed>( ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer) where TUsing : ContainerInfrastructure where TUsed : ContainerInfrastructure { if (!ReferenceEquals(usedContainer.Infrastructure, _storageAccount)) { throw new InvalidOperationException(); } var configurable = ContainerConnector.GetConfigurable(usingContainer); configurable.Configure($"{_storageAccount.EnvironmentInvariantName}-connection-string", _storageAccount.ConnectionString); }
public void Connect <TUsing, TUsed>(ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer) where TUsing : ContainerInfrastructure where TUsed : ContainerInfrastructure { if (!ReferenceEquals(this, usedContainer.Infrastructure)) { throw new InvalidOperationException(); } var configurable = ContainerConnector.GetConfigurable(usingContainer); var reference = usingContainer.Infrastructure as IHaveHiddenLink; if (ReferenceEquals(null, reference)) { throw new InvalidOperationException("A container using an ApplicationInsights has to use an infrastructure implementing the IHaveHiddenLink interface"); } configurable.Configure("APPINSIGHTS_INSTRUMENTATIONKEY", InstrumentationKey); UsedBy.Add(reference); }
void IContainerConnector.Connect <TUsing, TUsed>(ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer) { if (!ReferenceEquals(this, usingContainer.Infrastructure)) { throw new InvalidOperationException(); } var ioTHub = usedContainer.Infrastructure as IoTHub; if (ReferenceEquals(null, ioTHub)) { throw new InvalidOperationException(); } IotHubs.Add(ioTHub); }
public abstract void Connect <TUsing, TUsed>(ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer) where TUsing : ContainerInfrastructure where TUsed : ContainerInfrastructure;
public ConnectorBuilder(ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer) { _usingContainer = usingContainer; _usedContainer = usedContainer; }
public static Person Uses(this Person person, ContainerWithInfrastructure container, string description) { person.Uses(container.Container, description); person.Uses(container.Container.SoftwareSystem, description); return(person); }
public static SoftwareSystem Uses(this SoftwareSystem system, ContainerWithInfrastructure container, string description, string technology) { system.Uses(container.Container, description, technology); system.Uses(container.Container.SoftwareSystem, description); return(system); }
public override void Connect <TUsing, TUsed>(ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer) { Configure(usingContainer, _connectionSource, failIfNoTarget: true); Configure(usedContainer, _connectionSource, failIfNoTarget: false); }