/// <summary> /// Instantiates an instance of <see cref="ProxiesBuilder"/> /// </summary> /// <param name="templateLoader"></param> /// <param name="artifacts">The discovered types of artifacts in the Bounded Context's assemblies</param> /// <param name="artifactTypes"></param> /// <param name="buildMessages"></param> public ProxiesBuilder(TemplateLoader templateLoader, Type[] artifacts, ArtifactTypes artifactTypes, IBuildMessages buildMessages) { _templateLoader = templateLoader; _artifacts = artifacts; _artifactTypes = artifactTypes; _buildMessages = buildMessages; }
/// <summary> /// Initializes a new instance of <see cref="BuildTaskPerformers"/> /// </summary> /// <param name="performers"><see cref="IInstancesOf{ICanPerformPostBuildTasks}">Performers</see></param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages</param> public BuildTaskPerformers( IInstancesOf <ICanPerformBuildTask> performers, IBuildMessages buildMessages) { _buildMessages = buildMessages; _performers = performers; }
/// <summary> /// Initializes a new instance of the <see cref="PostBuildTaskPerformers"/> class. /// </summary> /// <param name="runners">Runners to run.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param> public PostBuildTaskPerformers( IInstancesOf <ICanPerformPostBuildTask> runners, IBuildMessages buildMessages) { _runners = runners; _buildMessages = buildMessages; }
static void ThrowIfDuplicateArtifacts(ArtifactsConfiguration artifacts, IBuildMessages buildMessages) { var idMap = new Dictionary <ArtifactId, ClrType>(); bool foundDuplicate = false; foreach (var artifactDefinitionEntry in artifacts.GetAllArtifactDefinitions()) { if (idMap.ContainsKey(artifactDefinitionEntry.Key)) { foundDuplicate = true; var artifactId = artifactDefinitionEntry.Key; var clrType = idMap[artifactId]; buildMessages.Error($"The artifacts '{clrType.TypeString}' and '{artifactDefinitionEntry.Value.Type.TypeString}' has the same ArtifactId: '{artifactId}'"); } else { idMap.Add(artifactDefinitionEntry.Key, artifactDefinitionEntry.Value.Type); } } if (foundDuplicate) { throw new DuplicateArtifact(); } }
/// <summary> /// Initializes a new instance of the <see cref="TargetAssemblyModifiers"/> class. /// </summary> /// <param name="configuration"><see cref="BuildTarget"/> to use.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param> public TargetAssemblyModifiers( BuildTarget configuration, IBuildMessages buildMessages) { _configuration = configuration; _buildMessages = buildMessages; }
/// <summary> /// Instantiates and instance of <see cref="ArtifactsDiscoverer"/> /// </summary> /// <param name="assemblyContext"></param> /// <param name="artifactTypes"></param> /// <param name="buildMessages"></param> public ArtifactsDiscoverer(IAssemblyContext assemblyContext, ArtifactTypes artifactTypes, IBuildMessages buildMessages) { _assemblyContext = assemblyContext; _artifactTypes = artifactTypes.ToArray(); _buildMessages = buildMessages; Artifacts = DiscoverArtifacts(); }
/// <summary> /// Instantiates an instance of <see cref="ArtifactsConfigurationBuilder"/> /// </summary> /// <param name="artifacts">The discovered types of artifacts in the Bounded Context's assemblies</param> /// <param name="currentArtifactsConfiguration">The current <see cref="ArtifactsConfiguration"/> that will be used as a base for building a valid updated configuration that is returned from Build</param> /// <param name="artifactTypes">A list of <see cref="ArtifactType"/> which represents the different artifact types</param> /// <param name="buildMessages"></param> public ArtifactsConfigurationBuilder(Type[] artifacts, ArtifactsConfiguration currentArtifactsConfiguration, ArtifactTypes artifactTypes, IBuildMessages buildMessages) { _artifacts = artifacts; _buildMessages = buildMessages; _artifactTypes = artifactTypes; _currentArtifactsConfiguration = currentArtifactsConfiguration; }
/// <summary> /// Validates the <see cref="ArtifactsConfiguration"/> based on the bounded context's topology and the discoved artifact types in the assemblies of the bounded context. /// </summary> /// <param name="configuration">The <see cref="ArtifactsConfiguration"/> being extended.</param> /// <param name="boundedContextTopology"><see cref="BoundedContextTopology"/> to validate against.</param> /// <param name="types">All <see cref="Type">types</see> to validate.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages.</param> public static void ValidateArtifacts( this ArtifactsConfiguration configuration, BoundedContextTopology boundedContextTopology, IEnumerable <Type> types, IBuildMessages buildMessages) { ThrowIfDuplicateArtifacts(configuration, buildMessages); WarnIfFeatureMissingFromTopology(configuration, boundedContextTopology, buildMessages); WarnIfArtifactNoLongerInStructure(configuration, types, buildMessages); }
/// <summary> /// Initializes a new instance of the <see cref="CopyFiles"/> class. /// </summary> /// <param name="configuration"><see cref="Configuration"/> to use.</param> /// <param name="assemblyPaths"><see cref="AssemblyPaths"/> to use.</param> /// <param name="assemblies"><see cref="Assemblies"/> for handling what assemblies is part of the deployment.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param> /// <param name="buildTarget">Current <see cref="BuildTarget"/>.</param> public CopyFiles( Configuration configuration, AssemblyPaths assemblyPaths, Assemblies assemblies, IBuildMessages buildMessages, BuildTarget buildTarget) { _configuration = configuration; _assemblyPaths = assemblyPaths; _assemblies = assemblies; _buildMessages = buildMessages; _buildTarget = buildTarget; }
/// <summary> /// Initializes a new instance of <see cref="ContractToImplementorMapEmbedder"/> /// </summary> /// <param name="buildTarget"><see cref="BuildTarget"/> to embed for</param> /// <param name="modifiers"><see cref="ITargetAssemblyModifiers"/> for working with modifiers</param> /// <param name="serializer"><see cref="IContractToImplementorsSerializer"/> for serializating maps</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages</param> /// <param name="logger"><see cref="ILogger"/> for logging</param> public ContractToImplementorMapEmbedder( BuildTarget buildTarget, ITargetAssemblyModifiers modifiers, IContractToImplementorsSerializer serializer, IBuildMessages buildMessages, ILogger logger) { _buildTarget = buildTarget; _modifiers = modifiers; _buildMessages = buildMessages; _logger = logger; _serializer = serializer; }
/// <summary> /// Initializes a new instance of the <see cref="ArtifactsEmbedder"/> class. /// </summary> /// <param name="configuration">Current <see cref="Configuration"/> used.</param> /// <param name="buildTarget">Current <see cref="BuildTarget"/> being built.</param> /// <param name="assemblies">All <see cref="Assemblies"/>.</param> /// <param name="modifiers"><see cref="ITargetAssemblyModifiers"/> for modifying the target.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> to use for outputting build messages.</param> public ArtifactsEmbedder( Configuration configuration, BuildTarget buildTarget, Assemblies assemblies, ITargetAssemblyModifiers modifiers, IBuildMessages buildMessages) { _configuration = configuration; _assemblies = assemblies; _modifiers = modifiers; _buildTarget = buildTarget; _buildMessages = buildMessages; }
/// <summary> /// Initializes a new instance of the <see cref="BuildTask"/> class. /// </summary> /// <param name="buildTarget">Current <see cref="BuildTarget"/>.</param> /// <param name="configuration">Current <see cref="BuildTaskConfiguration"/>.</param> /// <param name="boundedContextLoader"><see cref="IBoundedContextLoader"/> for loading bounded-context.json.</param> /// <param name="artifactTypes">Known <see cref="ArtifactTypes"/>.</param> /// <param name="topologyConfigurationHandler"><see cref="TopologyConfigurationHandler"/> for handling topology configuration.</param> /// <param name="artifactsConfigurationHandler"><see cref="ArtifactsConfigurationHandler"/> for handling artifacts configuration.</param> /// <param name="proxiesHandler"><see cref="ProxiesHandler"/> for dealing with proxies.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param> public BuildTask( BuildTarget buildTarget, BuildTaskConfiguration configuration, IBoundedContextLoader boundedContextLoader, ArtifactTypes artifactTypes, TopologyConfigurationHandler topologyConfigurationHandler, ArtifactsConfigurationHandler artifactsConfigurationHandler, ProxiesHandler proxiesHandler, IBuildMessages buildMessages) { _configuration = configuration; _boundedContextLoader = boundedContextLoader; _artifactTypes = artifactTypes; _buildMessages = buildMessages; _topologyConfigurationHandler = topologyConfigurationHandler; _artifactsConfigurationHandler = artifactsConfigurationHandler; _proxiesHandler = proxiesHandler; _buildTarget = buildTarget; }
/// <summary> /// Initializes a new instance of the <see cref="ArtifactsConfigurationHandler"/> class. /// </summary> /// <param name="configurationManager"><see cref="IArtifactsConfigurationManager"/> for working with the configuration.</param> /// <param name="artifactTypes">A list of <see cref="ArtifactType"/> which represents the different artifact types.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for build message output.</param> public ArtifactsConfigurationHandler(IArtifactsConfigurationManager configurationManager, ArtifactTypes artifactTypes, IBuildMessages buildMessages) { _configurationManager = configurationManager; _artifactTypes = artifactTypes; _buildMessages = buildMessages; }
/// <summary> /// Instantiates an instance of <see cref="TopologyConfigurationHandler"/> /// </summary> /// <param name="configurationManager"></param> /// <param name="buildMessages"></param> public TopologyConfigurationHandler(ITopologyConfigurationManager configurationManager, IBuildMessages buildMessages) { _configurationManager = configurationManager; _buildMessages = buildMessages; }
public IdempotentUnitOfWork(IStoreMessages storage, IDispatchMessages dispatcher, IBuildMessages builder) { this.storage = storage; this.dispatcher = dispatcher; this.builder = builder; }
/// <summary> /// Initializes a new instance of the <see cref="FileCopier"/> class. /// </summary> /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param> /// <param name="destinationPath">Destination path the copier is for.</param> public FileCopier(IBuildMessages buildMessages, string destinationPath) { _destinationPath = destinationPath; _buildMessages = buildMessages; }
static void ThrowIfDuplicateId(Applications.Configuration.Topology topology, bool useModules, IBuildMessages buildMessages) { var idMap = new Dictionary <Guid, string>(); bool hasDuplicateId = false; if (useModules) { foreach (var module in topology.Modules) { if (idMap.ContainsKey(module.Key)) { hasDuplicateId = true; var name = idMap[module.Key]; buildMessages.Error( $"Duplicate id found in bounded-context topology.\n" + $"The id: '{module.Key.Value}' is already occupied by the Module/Feature: '{name}' "); } else { idMap.Add(module.Key, module.Value.Name); } ThrowIfDuplicateId(module.Value.Features, ref idMap, ref hasDuplicateId, buildMessages); } } else { ThrowIfDuplicateId(topology.Features, ref idMap, ref hasDuplicateId, buildMessages); } if (hasDuplicateId) { throw new InvalidTopology("Bounded context topology has one or more Features/Modules with the same Id"); } }
static void WarnIfArtifactNoLongerInStructure(ArtifactsConfiguration artifacts, IEnumerable <Type> types, IBuildMessages messages) { var artifactDefinitions = new Dictionary <ArtifactId, ArtifactDefinition>(); foreach (var artifactDefinitionEntry in artifacts.GetAllArtifactDefinitions()) { if (!types.Contains(artifactDefinitionEntry.Value.Type.GetActualType())) { artifactDefinitions.Add(artifactDefinitionEntry.Key, artifactDefinitionEntry.Value); } } if (artifactDefinitions.Any()) { messages.Warning("There are artifacts that are not found in the Bounded Context's artifacts file:"); messages.Warning("Artifacts:"); foreach (var artifactDefinitionEntry in artifactDefinitions) { messages.Warning($"\tArtifact: '{artifactDefinitionEntry.Key.Value}' - '{artifactDefinitionEntry.Value.Type.TypeString} @{artifactDefinitionEntry.Value.Generation.Value}'"); } throw new ArtifactNoLongerInStructure(); } }
static void WarnIfFeatureMissingFromTopology(ArtifactsConfiguration artifacts, BoundedContextTopology boundedContextTopology, IBuildMessages buildMessages) { Dictionary <Feature, FeatureName> featureMap = boundedContextTopology.RetrieveAllFeatureIds(); foreach (var artifact in artifacts) { if (!featureMap.ContainsKey(artifact.Key)) { buildMessages.Warning($"Found artifacts under a Feature that does not exist in the topology. Feature: '{artifact.Key}':"); buildMessages.Warning("Artifacts:"); var artifactDefinitions = artifacts.GetAllArtifactDefinitions(artifact.Key); foreach (var definitionEntry in artifactDefinitions) { buildMessages.Warning($"\tArtifact: '{definitionEntry.Key.Value}' - '{definitionEntry.Value.Type.TypeString} @{definitionEntry.Value.Generation.Value}'"); } } } }
/// <summary> /// Instantiates an instance of <see cref="TopologyBuilder"/> /// </summary> /// <param name="artifacts">The discovered types of artifacts in the Bounded Context's assemblies</param> /// <param name="boundedContextTopology">The <see cref="BoundedContextConfiguration"/> that will be modified, validated and returned from Build</param> /// <param name="buildMessages"></param> public TopologyBuilder(Type[] artifacts, BoundedContextTopology boundedContextTopology, IBuildMessages buildMessages) { _artifactTypes = artifacts; _buildMessages = buildMessages; _configuration = boundedContextTopology; }
/// <summary> /// Validates the <see cref="ArtifactsConfiguration"/> based on the bounded context's topology and the discoved artifact types in the assemblies of the bounded context /// </summary> public static void ValidateArtifacts(this ArtifactsConfiguration artifacts, BoundedContextTopology boundedContextTopology, Type[] types, IBuildMessages buildMessages) { ThrowIfDuplicateArtifacts(artifacts, buildMessages); WarnIfFeatureMissingFromTopology(artifacts, boundedContextTopology, buildMessages); WarnIfArtifactNoLongerInStructure(artifacts, types, buildMessages); }
/// <summary> /// Initializes a new instance of <see cref="PerformerConfigurationManager"/> /// </summary> /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting messages</param> /// <param name="fileSystem"><see cref="IFileSystem"/> to use</param> /// <param name="serializer">JSON <see cref="ISerializer"/></param> public PerformerConfigurationManager(IBuildMessages buildMessages, IFileSystem fileSystem, ISerializer serializer) { _fileSystem = fileSystem; _serializer = serializer; _buildMessages = buildMessages; }
static void ThrowIfDuplicateId(IDictionary <Feature, FeatureDefinition> features, ref Dictionary <Guid, string> idMap, ref bool hasDuplicateId, IBuildMessages buildMessages) { foreach (var feature in features) { if (idMap.ContainsKey(feature.Key)) { hasDuplicateId = true; var name = idMap[feature.Key]; buildMessages.Error($"The id: '{feature.Key.Value}' is already occupied by the Module/Feature: '{name}' "); } else { idMap.Add(feature.Key, feature.Value.Name); } ThrowIfDuplicateId(feature.Value.SubFeatures, ref idMap, ref hasDuplicateId, buildMessages); } }
/// <summary> /// Initializes a new instance of the <see cref="ProxiesHandler"/> class. /// </summary> /// <param name="templateLoader"><see cref="TemplateLoader"/> for loading templates.</param> /// <param name="artifactTypes">All <see cref="ArtifactTypes"/>.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages.</param> public ProxiesHandler(TemplateLoader templateLoader, ArtifactTypes artifactTypes, IBuildMessages buildMessages) { _templateLoader = templateLoader; _artifactTypes = artifactTypes; _buildMessages = buildMessages; }
/// <summary> /// Validates the <see cref="Applications.Configuration.Topology"/>. /// </summary> /// <param name="topology"><see cref="Applications.Configuration.Topology"/> to validate.</param> /// <param name="useModules">true if we're using modules, false if not.</param> /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages.</param> public static void ValidateTopology(this Applications.Configuration.Topology topology, bool useModules, IBuildMessages buildMessages) { ThrowIfDuplicateId(topology, useModules, buildMessages); }
/// <summary> /// Instantiates and instance of <see cref="EventProcessorDiscoverer"/> /// </summary> /// <param name="assemblyContext"></param> /// <param name="buildMessages"></param> public EventProcessorDiscoverer(IAssemblyContext assemblyContext, IBuildMessages buildMessages) { _assemblyContext = assemblyContext; _buildMessages = buildMessages; }