add: BlogApplication基架
This commit is contained in:
41
YaeBlog.Core/Builder/BlogApplication.cs
Normal file
41
YaeBlog.Core/Builder/BlogApplication.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
51
YaeBlog.Core/Builder/BlogApplicationBuilder.cs
Normal file
51
YaeBlog.Core/Builder/BlogApplicationBuilder.cs
Normal 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;
|
||||
}
|
||||
6
YaeBlog.Core/Builder/BlogApplicationOptions.cs
Normal file
6
YaeBlog.Core/Builder/BlogApplicationOptions.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace YaeBlog.Core.Builder;
|
||||
|
||||
public class BlogApplicationOptions
|
||||
{
|
||||
public string[]? Args { get; init; }
|
||||
}
|
||||
Reference in New Issue
Block a user