这是我的代码 -
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) =>
{
var cns = context.Configuration.GetConnectionString("db");
services.AddDbContext<DatabaseContext>(options => options.UseMySql(cns, ServerVersion.AutoDetect(cns)));
//Possible null reference return warning here-
services.AddScoped<IDatabaseContext>(provider => provider.GetService<DatabaseContext>());
services.AddScoped<CensusService>();
})
.Build();
要删除该警告,应该以什么方式编写该行?
ServiceProviderServiceExtensions.GetService<T>
返回T?
如果引用类型为空,则T
引用类型将成为可为空的引用类型,而注册需要不可为空的引用类型。
使用ServiceProviderServiceExtensions.GetRequiredService<T>
返回实例或抛出InvalidOperationException
如果没有类型T
的服务:
services.AddScoped<IDatabaseContext>(provider =>
provider.GetRequiredService<DatabaseContext>());
但是在DbContext
注册的情况下,AddDbContext
过载允许拆分合同和实现(如Julien在评论中建议的那样),因此,如果您只需要通过界面解决上下文,则可以使用其中之一:
services.AddDbContext<IDatabaseContext, DatabaseContext>(options => ...));
相关:
- 可为空的引用类型