Example #1
0
        private async Task <IMessageSink> CreateCompositeMessageSinkAsync(string projectFilePath, IMessageSink parentMessageSink, InMemoryMessageRepository inMemoryMessageRepository, string functionalityName)
        {
            // Now create the messages output file sink for this functionality.
            var messagesOutputFilePath = await this.GetMessagesOutputFilePathAsync(functionalityName, projectFilePath);

            var fileFormattedMessageSink = new FileFormattedMessageSink(this.StringlyTypedPathOperator, messagesOutputFilePath);

            // Create composite message sink for all sub-functionality to use, including 1) the parent functionality's message sink, the message repository for use in determining if there were any errors, and the file message sink for persistence of messages from this functionality.
            var compositeMessageSink = new CompositeMessageSink(this.MessageFormatter, new[] { parentMessageSink, inMemoryMessageRepository }, new[] { fileFormattedMessageSink });

            return(compositeMessageSink);
        }
Example #2
0
        public async Task <IMessageSink> GetMessageSinkAsync()
        {
            if (this.MessageSink == DefaultMessageSinkProvider.NullMessageSink)
            {
                var gettingProgramName = this.ProgramNameProvider.GetProgramNameAsync();
                var gettingMessagesOutputDirectoryPath = this.ProgramStartTimeSpecificMessagesOutputDirectoryPathProvider.GetProgramStartTimeSpecificMessagesOutputDirectoryPathAsync();

                await Task.WhenAll(gettingProgramName, gettingMessagesOutputDirectoryPath);

                var fileName = this.FileNameOperator.GetFileName(gettingProgramName.Result, Constants.OutputFileExtension);

                var messagesOutputFilePath = this.StringlyTypedPathOperator.Combine(gettingMessagesOutputDirectoryPath.Result, fileName);

                this.MessageSink = CompositeMessageSink.NewDefault(this.MessageFormatter, this.StringlyTypedPathOperator, messagesOutputFilePath);
            }

            return(this.MessageSink);
        }