static void Main(string[] args) { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); Bootstrapper.RegisterDependencies(resolver, null, Bootstrapper.LoggerTypeEnum.Console, "correlation-id"); resolver.Register<IHostableComponent, ExampleHostableComponent>(ExampleHostableComponent.FullyQualifiedName); IComponentHost componentHost = resolver.Resolve<IComponentHost>(); componentHost.Start(new StaticComponentHostConfigurationProvider(new List<ComponentConfiguration> { new ComponentConfiguration { ComponentIdentity = new ComponentIdentity(ExampleHostableComponent.FullyQualifiedName), Instances = 1, RestartEvaluator = (ex, retryCount) => { RestartHandler(ex, retryCount, new ComponentIdentity(ExampleHostableComponent.FullyQualifiedName)); return true; } } }), new CancellationTokenSource()); Console.Read(); }
private static async Task SimpleSaveAndRetrieve() { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver .UseCore(defaultTraceLoggerMinimumLogLevel:LogLevelEnum.Verbose) .UseAzure(); var resourceManager = container.Resolve<IAzureResourceManager>(); var tableStorageRepositoryFactory = container.Resolve<ITableStorageRepositoryFactory>(); var table = tableStorageRepositoryFactory.CreateAsynchronousNoSqlRepository<SampleEntity>(StorageAccountConnectionString, TableName); await resourceManager.CreateIfNotExistsAsync(table); string partitionKey = Guid.NewGuid().ToString(); string rowKey = Guid.NewGuid().ToString(); await table.InsertAsync(new SampleEntity { Name = "Someone New", PartitionKey = partitionKey, RowKey = rowKey }); SampleEntity retrievedEntity = await table.GetAsync(partitionKey, rowKey); Console.WriteLine(retrievedEntity.Name); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver.UseCore(defaultTraceLoggerMinimumLogLevel: LogLevelEnum.Verbose); IAsynchronousBackoffPolicy policy = resolver.Resolve<IAsynchronousBackoffPolicy>(); CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); Task.Run(async () => { try { await policy.ExecuteAsync(BackoffTask, cancellationTokenSource.Token); } catch (Exception ex) { Console.WriteLine(ex.Message); } }); Console.WriteLine("Press a key to finish..."); Console.ReadKey(); cancellationTokenSource.Cancel(); }
static void Main(string[] args) { // don't do this in a production app - use something like Stephen Cleary's AsyncContext Task.Run(async () => { IUnityContainer container = new UnityContainer(); IDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); string clientId = ConfigurationManager.AppSettings["keyVaultClientId"]; string clientSecret = ConfigurationManager.AppSettings["keyVaultClientSecret"]; string vaultUri = ConfigurationManager.AppSettings["keyVaultUri"]; resolver .UseCore() .UseAzure() .UseAsyncKeyVaultApplicationConfiguration(clientId, clientSecret, vaultUri); resolver.Register<ISampleWorker, SampleWorker>(); ISampleWorker worker = resolver.Resolve<ISampleWorker>(); await worker.Post(); await worker.Read(); }).Wait(); Console.ReadKey(); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); Bootstrapper.RegisterDependencies(resolver); IAsynchronousBackoffPolicy policy = resolver.Resolve<IAsynchronousBackoffPolicy>(); CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); Task.Run(async () => { try { await policy.Execute(BackoffTask, cancellationTokenSource.Token); } catch (Exception ex) { Console.WriteLine(ex.Message); } }); Console.WriteLine("Press a key to finish..."); Console.ReadKey(); cancellationTokenSource.Cancel(); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseAzure(); IAzureResourceManager azureResourceManager = dependencyResolver.Resolve<IAzureResourceManager>(); ILargeMessageQueueFactory largeMessageQueueFactory = dependencyResolver.Resolve<ILargeMessageQueueFactory>(); ILargeMessageQueue<SampleLargeQueueItem> queue = largeMessageQueueFactory.Create<SampleLargeQueueItem>(StorageAccountConnectionString, "samplereferencequeue", "samplequeueblobs"); azureResourceManager.CreateIfNotExistsAsync(queue.ReferenceQueue).Wait(); azureResourceManager.CreateIfNotExistsAsync(queue.BlobRepository).Wait(); queue.EnqueueAsync(CreateLargeQueueItem()).Wait(); Console.WriteLine("Queued large item. Press a key to dequeue..."); Console.ReadKey(); queue.DequeueAsync(message => { SampleLargeQueueItem item = message.Item; Console.WriteLine("Dequeued large item of text length {0}. Press a key....", item.LotsOfText.Length); return Task.FromResult(true); }).Wait(); Console.ReadKey(); }
private static async Task<string> LargeBatchInsert() { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver .UseCore(defaultTraceLoggerMinimumLogLevel: LogLevelEnum.Verbose) .UseAzure(); var resourceManager = container.Resolve<IAzureResourceManager>(); var tableStorageRepositoryFactory = container.Resolve<ITableStorageRepositoryFactory>(); var table = tableStorageRepositoryFactory.CreateAsynchronousNoSqlRepository<SampleEntity>(StorageAccountConnectionString, TableName); await resourceManager.CreateIfNotExistsAsync(table); string partitionKey = Guid.NewGuid().ToString(); List<SampleEntity> entities = new List<SampleEntity>(); for (int item = 0; item < 725; item++) { entities.Add(new SampleEntity { Name = $"Name {item}", PartitionKey = partitionKey, RowKey = Guid.NewGuid().ToString() }); } await table.InsertBatchAsync(entities); Console.WriteLine($"Inserted 725 items into partition {partitionKey}"); return partitionKey; }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver .UseCore() .UseAzure(); IApplicationResourceFactory applicationResourceFactory = container.Resolve<IApplicationResourceFactory>(); string secondSubscriptionName = applicationResourceFactory.Setting(SampleComponent, "second-subscription"); IAsynchronousTopic<MyMessage> topic = applicationResourceFactory.GetAsyncTopic<MyMessage>(SampleComponent); IAsynchronousSubscription<MyMessage> firstSubscription = applicationResourceFactory.GetAsyncSubscription<MyMessage>(SampleComponent); IAsynchronousSubscription<MyMessage> secondSubscription = applicationResourceFactory.GetAsyncSubscription<MyMessage>(secondSubscriptionName, SampleComponent); // below is exceedingly naive but is just to illustrate api usage Task.Run(async () => { while (true) { await Task.Delay(1500); await firstSubscription.RecieveAsync(m => { System.Console.Write("First Subscription: "); System.Console.WriteLine(m.SaySomething); return Task.FromResult(true); }); } }); Task.Run(async () => { while (true) { await Task.Delay(3333); await secondSubscription.RecieveQueueItemAsync(m => { System.Console.Write("Second Subscription: "); System.Console.WriteLine(m.Item.SaySomething); return Task.FromResult(true); }); } }); topic.SendAsync(new MyMessage { SaySomething = "Hello World" }, new Dictionary<string, object> { {"P1", 56}, {"P2", "Zaphod"} }); System.Console.Read(); }
// Default configuration writing to the trace pipe without using a factory. private static void DefaultConfigurationSampleNoFactory() { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseSerilog(); ILogger sampleLogger = dependencyResolver.Resolve<ILogger>(); var structuredData = new { Hello = "World", SubObject = new { Some = "Bling" } }; sampleLogger.Warning("A simple log item with data {0}", structuredData); }
// Default configuration writing to the trace pipe without using a factory. private static void SupplyingADefaultSource() { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseSerilog(defaultLoggerSource: new LoggerSource("MyComponent")); ILogger sampleLogger = dependencyResolver.Resolve<ILogger>(); var structuredData = new { Hello = "World", SubObject = new { Some = "Bling" } }; sampleLogger.Warning("A simple log item with data and source {@StructuredData} |{SourceFqn}| ", structuredData); }
// Demonstrates how to: // Set the default minimum log level // Log an item against a component // How to get the underlying Serilog logger private static void LogDirectlyWithSerilog() { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseSerilog(defaultMinimumLogLevel:LogLevelEnum.Information); ISerilogFactory loggerFactory = dependencyResolver.Resolve<ISerilogFactory>(); Serilog.ILogger sampleLogger = loggerFactory.CreateSerilog(new ComponentIdentity("accidentalfish.applicationsupport.samples.serilog")); var structuredData = new {Hello = "World", SubObject = new {Some = "Bling"}}; sampleLogger.Information("A simple log item {@StructuredData} - {SourceFqn}", structuredData); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); IDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver.UseCore().UseAzure(); IAzureQueueFactory queueFactory = resolver.Resolve<IAzureQueueFactory>(); IAzureResourceManager resourceManager = resolver.Resolve<IAzureResourceManager>(); IAsynchronousQueue<SampleQueueItem> queue = queueFactory.CreateAsynchronousBrokeredMessageQueue<SampleQueueItem>(ServiceBusConnectionString, "aqueue"); Task<bool> resultTask = resourceManager.CreateIfNotExistsAsync(queue); resultTask.Wait(); Console.WriteLine(resultTask.Result); Task<bool> deleteResultTask = resourceManager.DeleteIfExistsAsync(queue); deleteResultTask.Wait(); Console.WriteLine(deleteResultTask.Result); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); AccidentalFish.ApplicationSupport.Core.Bootstrapper.RegisterDependencies(dependencyResolver); AccidentalFish.ApplicationSupport.Azure.Bootstrapper.RegisterDependencies(dependencyResolver); AccidentalFish.ApplicationSupport.Processes.Bootstrapper.RegisterDependencies(dependencyResolver); IComponentHost componentHost = dependencyResolver.Resolve<IComponentHost>(); ILoggerFactory loggerFactory = dependencyResolver.Resolve<ILoggerFactory>(); ILogger logger = loggerFactory.CreateShortLivedLogger(new ComponentIdentity("com.accidental-fish.application-support")); CancellationTokenSource source = new CancellationTokenSource(); StartComponentHost(componentHost, logger, source); logger.Information("Something to log"); Console.ReadLine(); source.Cancel(); Thread.Sleep(500); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver .UseCore(defaultTraceLoggerMinimumLogLevel:LogLevelEnum.Verbose) .UseEntityFramework(); IUnitOfWorkFactoryProvider provider = container.Resolve<IUnitOfWorkFactoryProvider>(); _unitOfWorkFactory = provider.Create( "UnitOfWorkAndRepository.Model.BookShopContext, UnitOfWorkAndRepository", @"Server=(local);Database=BookStoreSample;Connection Timeout=30;;Integrated Security=True"); Database.SetInitializer(new DropCreateDatabaseAlways<BookShopContext>()); DemonstrateInsert().Wait(); DemonstrateSimpleFetch().Wait(); Console.WriteLine("\nPress a key..."); Console.ReadKey(); }
private static void RegularTimerDemo() { Console.WriteLine("Regular timer demo"); var container = new UnityContainer(); var dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver.UseCore(); var timerFactory = dependencyResolver.Resolve<ITimerFactory>(); var timer = timerFactory.CreateAsynchronousRegularTimer(TimeSpan.FromSeconds(1)); var source = new CancellationTokenSource(); var counter = 0; timer.ExecuteAsync((ct) => { Console.WriteLine($"Step {counter++}"); }, source.Token); Console.ReadKey(); source.Cancel(); }
private static async Task AsyncMain(Options options) { if (!File.Exists(options.Configuration)) { throw new ConsoleAppException("Configuration file does not exist"); } IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(new UnityContainer()); dependencyResolver.UseCore().UseAzure(); string[] settingsFiles = options.Settings.Split(','); ApplicationConfigurationSettings settings = ApplicationConfigurationSettings.FromFiles(settingsFiles); ApplicationConfiguration configuration = await ApplicationConfiguration.FromFileAsync(options.Configuration, settings, false); IKeyVaultFactory keyVaultFactory = dependencyResolver.Resolve<IKeyVaultFactory>(); IKeyVault keyVault = keyVaultFactory.Create(options.KeyVaultClientId, options.KeyVaultClientKey, options.KeyVaultUri); IKeyVaultConfigurationKeyEncoder encoder = dependencyResolver.Resolve<IKeyVaultConfigurationKeyEncoder>(); await SetSecrets(configuration, keyVault, encoder, options.Verbose); }
static void Main(string[] args) { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseAzure() .UseQueueLogger(defaultMinimumLogLevel:LogLevelEnum.Verbose) .UseHostableProcesses(); IComponentHost componentHost = dependencyResolver.Resolve<IComponentHost>(); ILoggerFactory loggerFactory = dependencyResolver.Resolve<ILoggerFactory>(); IAsynchronousLogger logger = loggerFactory.CreateAsynchronousLogger(new ComponentIdentity("com.accidental-fish.application-support")); CancellationTokenSource source = new CancellationTokenSource(); StartComponentHost(componentHost, logger, source); logger.InformationAsync("Something to log"); Console.ReadLine(); source.Cancel(); Thread.Sleep(500); }
private static async Task AsyncMain(Options options) { WriteVerbose($"Processing configuration file {options.Configuration}"); if (!File.Exists(options.Configuration)) { throw new ConsoleAppException("Configuration file does not exist"); } IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(new UnityContainer()); dependencyResolver.UseCore().UseAzure(); bool useKeyVault = !string.IsNullOrWhiteSpace(options.KeyVaultClientId) && !string.IsNullOrWhiteSpace(options.KeyVaultClientKey) && !string.IsNullOrWhiteSpace(options.KeyVaultUri); IAsyncConfiguration keyVaultConfiguration = null; if (useKeyVault) { dependencyResolver.UseAsyncKeyVaultApplicationConfiguration(options.KeyVaultClientId, options.KeyVaultClientKey, options.KeyVaultUri); keyVaultConfiguration = dependencyResolver.Resolve<IAsyncKeyVaultConfiguration>(); WriteVerbose($"Using key vault {options.KeyVaultUri}"); } WriteVerbose("Reading settings"); string[] settingsFiles = options.Settings.Split(','); ApplicationConfigurationSettings settings = ApplicationConfigurationSettings.FromFiles(settingsFiles); WriteVerbose("Reading configuration"); ApplicationConfiguration configuration = await ApplicationConfiguration.FromFileAsync(options.Configuration, settings, options.CheckForMissingSettings, keyVaultConfiguration, WriteVerbose); ApplyCorsRules(configuration); foreach (ApplicationComponent component in configuration.ApplicationComponents) { if (component.UsesServiceBus) { WriteVerbose($"Creating service bus resources for component {component.Fqn}"); if (!String.IsNullOrWhiteSpace(component.DefaultTopicName)) { NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(component.ServiceBusConnectionString); if (!namespaceManager.TopicExists(component.DefaultTopicName)) { namespaceManager.CreateTopic(new TopicDescription(component.DefaultTopicName)); } if (!String.IsNullOrWhiteSpace(component.DefaultSubscriptionName)) { if ( !namespaceManager.SubscriptionExists(component.DefaultTopicName, component.DefaultSubscriptionName)) { namespaceManager.CreateSubscription( new SubscriptionDescription(component.DefaultTopicName, component.DefaultSubscriptionName)); } } } if (!String.IsNullOrWhiteSpace(component.DefaultBrokeredMessageQueueName)) { NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(component.ServiceBusConnectionString); if (!namespaceManager.QueueExists(component.DefaultBrokeredMessageQueueName)) { namespaceManager.CreateQueue(component.DefaultBrokeredMessageQueueName); } } foreach (ApplicationComponentSetting setting in component.Settings) { string resourceType = setting.ResourceType; if (resourceType != null) { resourceType = resourceType.ToLower(); if (resourceType == "topic") { NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(component.ServiceBusConnectionString); if (!namespaceManager.TopicExists(setting.Value)) { namespaceManager.CreateTopic(new TopicDescription(setting.Value)); } } else if (resourceType == "subscription") { NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(component.ServiceBusConnectionString); string topicPath = setting.Attributes["topic"]; if (!namespaceManager.TopicExists(topicPath)) { namespaceManager.CreateTopic(new TopicDescription(topicPath)); } if (!namespaceManager.SubscriptionExists(topicPath, setting.Value)) { namespaceManager.CreateSubscription(new SubscriptionDescription(topicPath, setting.Value)); } } else if (resourceType == "brokered-message-queue") { NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(component.ServiceBusConnectionString); if (!namespaceManager.QueueExists(setting.Value)) { namespaceManager.CreateQueue(setting.Value); } } } } } if (component.UsesAzureStorage) { CloudStorageAccount storageAccount = CloudStorageAccount.Parse(component.StorageAccountConnectionString); if (!string.IsNullOrWhiteSpace(component.DefaultBlobContainerName)) { CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer blobContainer = blobClient.GetContainerReference(component.DefaultBlobContainerName); blobContainer.CreateIfNotExists( BlobContainerPublicAccessType(component.DefaultBlobContainerAccessType)); WriteVerbose($"Creating blob container {component.DefaultBlobContainerName} in {storageAccount.BlobEndpoint}"); if (component.Uploads != null) { foreach (string uploadFilename in component.Uploads) { string fullUploadFilename = Path.Combine(Path.GetDirectoryName(options.Configuration), uploadFilename); CloudBlockBlob blob = blobContainer.GetBlockBlobReference(Path.GetFileName(uploadFilename)); blob.UploadFromFile(fullUploadFilename, FileMode.Open); WriteVerbose($"Uploading file {uploadFilename} to blob container {component.DefaultBlobContainerName}"); } } } if (!string.IsNullOrWhiteSpace(component.DefaultLeaseBlockName)) { CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer blobContainer = blobClient.GetContainerReference(component.DefaultLeaseBlockName); blobContainer.CreateIfNotExists( BlobContainerPublicAccessType(component.DefaultBlobContainerAccessType)); WriteVerbose($"Creating lease block container {component.DefaultLeaseBlockName} in {storageAccount.BlobEndpoint}"); } if (!string.IsNullOrWhiteSpace(component.DefaultQueueName)) { CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = queueClient.GetQueueReference(component.DefaultQueueName); queue.CreateIfNotExists(); WriteVerbose($"Creating queue {component.DefaultQueueName} in {storageAccount.QueueEndpoint}"); } if (!string.IsNullOrWhiteSpace(component.DefaultTableName)) { CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); CloudTable table = tableClient.GetTableReference(component.DefaultTableName); table.CreateIfNotExists(); WriteVerbose($"Creating table {component.DefaultTableName} in {storageAccount.TableEndpoint}"); if (!string.IsNullOrWhiteSpace(component.TableData)) { XDocument document; string tableDataFilename = Path.Combine(Path.GetDirectoryName(options.Configuration), component.TableData); try { using (StreamReader reader = new StreamReader(tableDataFilename)) { document = XDocument.Load(reader); } } catch (Exception ex) { document = null; WriteVerbose($"Unable to load table data document {tableDataFilename}. Error: {ex.Message}"); } if (document != null) { UploadTableData(table, document); } } } foreach (ApplicationComponentSetting setting in component.Settings) { string resourceType = setting.ResourceType; if (resourceType != null) { resourceType = resourceType.ToLower(); if (resourceType == "table") { CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); CloudTable table = tableClient.GetTableReference(setting.Value); table.CreateIfNotExists(); WriteVerbose($"Creating table {setting.Value} in {storageAccount.TableEndpoint}"); } else if (resourceType == "queue") { CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = queueClient.GetQueueReference(setting.Value); queue.CreateIfNotExists(); WriteVerbose($"Creating queue {setting.Value} in {storageAccount.TableEndpoint}"); } else if (resourceType == "blob-container") { CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer blobContainer = blobClient.GetContainerReference(setting.Value); blobContainer.CreateIfNotExists(); WriteVerbose($"Creating blob container {setting.Value} in {storageAccount.TableEndpoint}"); } } } } } }
public void Setup() { _container = new UnityContainer(); _resolver = new UnityApplicationFrameworkDependencyResolver(_container); _resolver.UseCore().UseAzure(); }
// Demonstrates how to access the underlying Serilog with a cast private static void AccessSerilogWithCast() { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseSerilog(); ILoggerFactory loggerFactory = dependencyResolver.Resolve<ILoggerFactory>(); Serilog.ILogger sampleLogger = (Serilog.ILogger)loggerFactory.CreateLogger(); sampleLogger.Warning("Casts are handy"); }
private static async Task GetAllInPartition(string partitionKey) { IUnityContainer container = new UnityContainer(); UnityApplicationFrameworkDependencyResolver resolver = new UnityApplicationFrameworkDependencyResolver(container); resolver .UseCore(defaultTraceLoggerMinimumLogLevel: LogLevelEnum.Verbose) .UseAzure(); var resourceManager = container.Resolve<IAzureResourceManager>(); var tableStorageRepositoryFactory = container.Resolve<ITableStorageRepositoryFactory>(); var table = tableStorageRepositoryFactory.CreateAsynchronousNoSqlRepository<SampleEntity>(StorageAccountConnectionString, TableName); await resourceManager.CreateIfNotExistsAsync(table); IEnumerable<SampleEntity> entities = await table.GetAsync(partitionKey); Console.WriteLine($"Retrieved {entities.Count()} items"); }
// Demonstrates how to supply a custom basic log configuration to the factory private static void FactorySerilogConfiguration() { IUnityContainer container = new UnityContainer(); IDependencyResolver dependencyResolver = new UnityApplicationFrameworkDependencyResolver(container); dependencyResolver .UseCore() .UseSerilog( configurationProvider: () => new LoggerConfiguration().WriteTo.ColoredConsole(), defaultMinimumLogLevel: LogLevelEnum.Information); ILoggerFactory loggerFactory = dependencyResolver.Resolve<ILoggerFactory>(); ILogger sampleLogger = loggerFactory.CreateLogger(new ComponentIdentity("accidentalfish.applicationsupport.samples.serilog")); sampleLogger.Warning("Coloured console {SourceFqn}"); sampleLogger.Error("Colourful {SourceFqn}"); }