add: BlogApplication基架

This commit is contained in:
2024-01-16 20:33:39 +08:00
parent 1abc2ff933
commit b12aa481e1
10 changed files with 110 additions and 55 deletions

View File

@@ -0,0 +1,41 @@
using Microsoft.Extensions.Hosting;
namespace YaeBlog.Core.Builder;
public class BlogApplication : IHost
{
private readonly IHost _host;
internal BlogApplication(IHost host)
{
_host = host;
}
public static BlogApplicationBuilder Create(string[] args)
{
BlogApplicationOptions options = new() { Args = args };
return new BlogApplicationBuilder(options);
}
public Task StartAsync(CancellationToken cancellationToken = new())
{
return _host.StartAsync(cancellationToken);
}
public Task StopAsync(CancellationToken cancellationToken = new())
{
return _host.StopAsync(cancellationToken);
}
public IServiceProvider Services => _host.Services;
public Task RunAsync() => _host.RunAsync();
public void Run() => _host.Run();
public void Dispose()
{
_host.Dispose();
GC.SuppressFinalize(this);
}
}

View File

@@ -0,0 +1,51 @@
using Markdig;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.Metrics;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using YaeBlog.Core.Extensions;
namespace YaeBlog.Core.Builder;
public sealed class BlogApplicationBuilder : IHostApplicationBuilder
{
private readonly HostApplicationBuilder _hostApplicationBuilder;
public MarkdownPipelineBuilder MarkdigPipelineBuilder { get; set; }
internal BlogApplicationBuilder(BlogApplicationOptions options)
{
ConfigurationManager configuration = new();
MarkdigPipelineBuilder = new MarkdownPipelineBuilder();
_hostApplicationBuilder = new HostApplicationBuilder(new HostApplicationBuilderSettings
{
Args = options.Args, Configuration = configuration
});
}
public BlogApplication Build()
{
this.ConfigureBlogApplication();
return new BlogApplication(_hostApplicationBuilder.Build());
}
public void ConfigureContainer<TContainerBuilder>(
IServiceProviderFactory<TContainerBuilder> factory, Action<TContainerBuilder>? configure = null)
where TContainerBuilder : notnull
=> _hostApplicationBuilder.ConfigureContainer(factory, configure);
public IDictionary<object, object> Properties
=> (_hostApplicationBuilder as IHostApplicationBuilder).Properties;
public IHostEnvironment Environment => _hostApplicationBuilder.Environment;
public IConfigurationManager Configuration => _hostApplicationBuilder.Configuration;
public ILoggingBuilder Logging => _hostApplicationBuilder.Logging;
public IMetricsBuilder Metrics => _hostApplicationBuilder.Metrics;
public IServiceCollection Services => _hostApplicationBuilder.Services;
}

View File

@@ -0,0 +1,6 @@
namespace YaeBlog.Core.Builder;
public class BlogApplicationOptions
{
public string[]? Args { get; init; }
}