using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.VisualStudio.TestPlatform.TestHost;
namespace SemanticKernelStudy.Test
{
///
/// xUnit:依赖注入框架(Xunit.DependencyInjection)的启动类
/// 1、执行顺序按照方法代码书写顺序执行(BuildHost有点特殊
/// 2、两种风格任选其一即可:同时存在,则HostApplicationBuilder风格优先,Startup风格的方法会被忽略
/// 3、两种风格都支持Configure方法:都会在最后执行
///
public class StartupTemplate //代码中必须改为 Startup
{
#region HostApplicationBuilder 风格
///
/// 必须:主配置方法
/// 1、用本方法区分两种风格:本方法优先,如果存在本方法,则忽略Startup风格的方法
///
///
public void ConfigureHostApplicationBuilder(IHostApplicationBuilder hostApplicationBuilder)
{
}
///
/// 可选:生成IHost主机,只在异常时需要此方法
/// 在程序因找不到此方法签名异常时,只需添加本方法,并调用 hostApplicationBuilder.Build() 即可构建主机。
///
///
///
public IHost BuildHostApplicationBuilder(HostApplicationBuilder hostApplicationBuilder)
{
return hostApplicationBuilder.Build();
}
#endregion
#region Startup 风格
///
/// 可选:创建HostBuilder
/// 主要用于Minimal API场景,需导入Xunit.DependencyInjection.AspNetCoreTesting包
///
///
public IHostBuilder CreateHostBuilder(System.Reflection.AssemblyName assemblyName)
{
// minimal API testing, see details: https://github.com/pengweiqhca/Xunit.DependencyInjection#minimalapi
// return MinimalApiHostBuilderFactory.GetHostBuilder();
//通用方式:可以省略本方法
return new HostBuilder().ConfigureServices(services => services.AddSingleton(this));
}
///
/// 可选:配置Host主机
///
///
public void ConfigureHost(IHostBuilder hostBuilder)
{
}
///
/// 可选:构建Host主机
/// 如果找不到此方法签名,使用此方法即可构建主机
/// 注意:没有异常时,不需要此方法
///
///
///
public IHost BuildHost(IHostBuilder hostBuilder)
{
//注意:执行Build 方法之前(此时还没有创建IHost对象),先执行 ConfigureServices 方法
IHost host = hostBuilder.Build();
//注意:ConfigureServices方法执行后,回返回此处继续执行
return host;
}
///
/// 配置IoC容器服务
/// 注意:如果有BuildHost方法,则执行本方法后,回返回 BuildHost 方法继续执行
///
/// 必须
/// 可选
///
public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
{
}
#endregion
///
/// 可选:两种风格都支持的方法(最后执行)
/// 参数:已经注册过的对象都可以,默认情况下,IServiceCollection 未注册
///
/// 可选的 IServiceProvider
public void Configure
(
IHostEnvironment env,
//IHostingEnvironment hostingEnv,
HostBuilderContext hostBuilderContext,
IConfiguration Con,
//IApplicationLifetime appLifetime,
IHostApplicationLifetime hostAppLifetime,
IHostLifetime hostLifetime,
IHost host,
IOptions options,
IConfigureOptions hostOptions,
ITestOutputHelperAccessor helperAccessor,
ILoggerFactory loggerFactory,
//ILogger logger,
//IHostApplicationBuilder appBuilder,
//IServiceCollection services,
IXunitTestCaseRunnerWrapper wraper,
IServiceProvider applicationServices
)
{
var s = applicationServices.GetService();
}
}
}