私はASP.NET Core MVCには比較的新しいので、依存性注入に関する問題にぶち間かかっています。ASP.NET Core MVC Dependency Injection issue
私は、EFデータベースコンテキストクラスを共有したい複数のプロジェクトを持つソリューションを用意しています。私は構成マネージャのためのインターフェイスを定義したので、プロジェクト間で共通の設定を共有できますが、プロジェクト固有の設定もあります。
様々なAPIの依存性注入を実行している
"System.InvalidOperationException: Unable to resolve service for type IConfigManager"
エラーで失敗します。
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0] An unhandled exception has occurred while executing the request System.InvalidOperationException: Unable to resolve service for type 'NovaSec.Core.IConfigManager' while attempting to activate 'NovaSec.Core.Contexts.CustomDbContext'. at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.PopulateCallSites(ServiceProvider provider, ISet`1 callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
DBContextClass
は、他のプロジェクトで参照しているクラスライブラリプロジェクトの一部です。
なぜ動作しないのかわかりません。誰かが助けてくれてこれを私に説明できますか?
DBContextクラス
public class CustomDbContext : IdentityDbContext<CustomIdentity, CustomRole, string>
{
public CustomDbContext(DbContextOptions<CustomDbContext> options, IConfigManager configManager) : base(options)
{
var optionsBuilder = new DbContextOptionsBuilder<CustomDbContext>();
optionsBuilder.UseSqlite(configManager._config.ConnectionStrings.FirstOrDefault(c => c.id == "IdentityDatabase").connectionString);
}
}
コンフィグマネージャのインターフェースと実装クラス
public interface IConfigManager
{
IAppConfig _config { get; set; }
}
public class ConfigManager : IConfigManager
{
public IAppConfig _config { get; set; }
public ConfigManager(IAppConfig config)
{
}
}
起動方法
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfigManager, ConfigManager>(config =>
{
return new ConfigManager(_config);
});
IServiceProvider serviceProvider = services.BuildServiceProvider();
_configManager = (ConfigManager)serviceProvider.GetService<IConfigManager>();
services.AddDbContext<CustomDbContext>();
services.AddIdentity<CustomIdentity, CustomRole>(config => {
config.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<CustomDbContext>()
.AddDefaultTokenProviders();
services.AddIdentityServer()
.AddInMemoryClients(_configManager.GetClients())
.AddInMemoryIdentityResources(_configManager.GetIdentityResources())
.AddInMemoryApiResources(_configManager.GetApiResources())
.AddTemporarySigningCredential()
.AddAspNetIdentity<CustomIdentity>();
}
も協力することをい元気?問題を再現するために使用できる[mcve]を提供してください。 – Nkosi
configメソッド内にサービスプロバイダを作成せず、プロバイダを作成した後にサービスを追加しないでください。 –