You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.8 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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