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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #6
0
 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;
 }
Exemple #8
0
 public static Person Uses(this Person person, ContainerWithInfrastructure container, string description)
 {
     person.Uses(container.Container, description);
     person.Uses(container.Container.SoftwareSystem, description);
     return(person);
 }
Exemple #9
0
 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);
 }
Exemple #10
0
 public override void Connect <TUsing, TUsed>(ContainerWithInfrastructure <TUsing> usingContainer, ContainerWithInfrastructure <TUsed> usedContainer)
 {
     Configure(usingContainer, _connectionSource, failIfNoTarget: true);
     Configure(usedContainer, _connectionSource, failIfNoTarget: false);
 }