Asp.net core 即使将该类添加到服务中,也无法从根提供程序解析作用域服务
在ASP.NET核心项目中,我有以下启动时的ConfigureServices方法:Asp.net core 即使将该类添加到服务中,也无法从根提供程序解析作用域服务,asp.net-core,asp.net-core-3.1,Asp.net Core,Asp.net Core 3.1,在ASP.NET核心项目中,我有以下启动时的ConfigureServices方法: public void ConfigureServices(IServiceCollection services) { ... services.AddLiteDatabase<Database>(connectionString); ... } 我可以获取IWebHostEnvironment,但获取数据库时出错: Cannot resolve scoped servic
public void ConfigureServices(IServiceCollection services) {
...
services.AddLiteDatabase<Database>(connectionString);
...
}
我可以获取IWebHostEnvironment,但获取数据库时出错:
Cannot resolve scoped service 'Database' from root provider.'
我错过了什么
剩余代码
在方法AddLiteDatabase
中,我有:
public static void AddLiteDatabase<T>(this IServiceCollection services, String connectionString) where T : LiteDatabase {
T database = (T)Activator.CreateInstance(typeof(T), new Object[] { connectionString });
services.AddScoped<T>(x => database);
}
其他类别包括:
public interface IDatabaseConfiguration<T> where T : LiteDatabase {
void Configure();
}
public class Database : LiteDatabase {
public Database(String connection) : base (connection) { }
}
public class DatabaseConfiguration : IDatabaseConfiguration<LiteDatabase> {
private readonly IApplicationBuilder _builder;
public DatabaseConfiguration(IApplicationBuilder builder) {
_builder = builder;
}
public void Configure() {
IServiceProvider provider = _builder.ApplicationServices;
IWebHostEnvironment environment = provider.GetService<IWebHostEnvironment>();
Database database = provider.GetService<Database>();
...
}
}
公共接口IDatabaseConfiguration,其中T:LiteDatabase{
void Configure();
}
公共类数据库:LiteDatabase{
公共数据库(字符串连接):基本(连接){}
}
公共类数据库配置:IDatabaseConfiguration{
私有只读IApplicationBuilder\u builder;
公共数据库配置(IApplicationBuilder){
_建筑商=建筑商;
}
public void Configure(){
IServiceProvider=\u builder.ApplicationServices;
IWebHostEnvironment环境=provider.GetService();
数据库=provider.GetService();
...
}
}
public static void AddLiteDatabase<T>(this IServiceCollection services, String connectionString) where T : LiteDatabase {
T database = (T)Activator.CreateInstance(typeof(T), new Object[] { connectionString });
services.AddScoped<T>(x => database);
}
public static void UseLiteDatabase<T>(this IApplicationBuilder builder) where T : IDatabaseConfiguration<LiteDatabase> {
T configuration = (T)Activator.CreateInstance(typeof(T), new Object[] { builder });
configuration.Configure();
}
public interface IDatabaseConfiguration<T> where T : LiteDatabase {
void Configure();
}
public class Database : LiteDatabase {
public Database(String connection) : base (connection) { }
}
public class DatabaseConfiguration : IDatabaseConfiguration<LiteDatabase> {
private readonly IApplicationBuilder _builder;
public DatabaseConfiguration(IApplicationBuilder builder) {
_builder = builder;
}
public void Configure() {
IServiceProvider provider = _builder.ApplicationServices;
IWebHostEnvironment environment = provider.GetService<IWebHostEnvironment>();
Database database = provider.GetService<Database>();
...
}
}