如何解决为 UnitTest 项目实例化一个 serviceprovider
所以这里有一点背景:
我有一个 ASP.NET 核心项目,一切都设置好了。我有不同的服务需要测试。 我为此创建了一个 UnitTest 项目。
我的问题是,当我尝试测试谷歌驱动器上传服务(需要服务提供者(IServiceProvider))时,但我找不到任何方法来实例化服务提供者,通常它在由 ASP.Net Core 本身启动,但正如我所说,出于测试目的,我需要在我的 UnitTest 项目中从头开始完全实例化。
这是我当前的 UnitTest 项目设置:
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json",optional: true,reloadOnChange: true)
.Build();
var serviceCollection = new ServiceCollection();
Startup s = new Startup(configuration);
s.ConfigureServices(serviceCollection);
/*serviceCollection.AddScoped<GoogleService>();
//serviceCollection.AddSingleton(_appContext);
serviceCollection.AddSingleton<Service.Domains.ApplicationDomain.Bll.Models.ApplicationCache>();
serviceCollection.AddScoped<Service.Services.AuditService>();
serviceCollection.AddHttpContextAccessor();*/
IServiceProvider provider = serviceCollection.BuildServiceProvider();
//services.AddScoped<Service.Services.AuditService>();
_service = new AuditService(GetDatabaseContext(),configuration,provider);
解决方法
看来修复很简单:
我们可以在 Program 类中重用 HostBuilder :
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json",optional: true,reloadOnChange: true)
.Build();
var serviceCollection = new ServiceCollection();
Startup s = new Startup(configuration);
s.ConfigureServices(serviceCollection);
var hostBuilder = Program.CreateHostBuilder(new string[] { }).Build().Services;
//services.AddScoped<Service.Services.AuditService>();
_auditService = new AuditService(GetDatabaseContext(),configuration,hostBuilder.GetRequiredService<IServiceProvider>());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。