ASP.NET Core 2 Preview 2にアップグレードしただけで、depedencyインジェクションの問題が発生しました。私はコア2プレビュー2にアップグレードした後で「タイプのサービスを解決できませんでした」というメッセージが表示される
を得るタイプの 方法「設定」のパラメータ「文脈」のタイプ 「LC.Tools.API.Data.GenericDbContext」のサービスを解決できませんでした「LC.Tools.API.Startup」プロジェクトを実行するときは です。
古いバージョンを使用しているときにこの問題は発生しませんでした。
DbContext(GenericDbContext):
namespace LC.Tools.API.Data
{
public class GenericDbContext : DbContext
{
public GenericDbContext(DbContextOptions<GenericDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
//Generic
builder.Entity<Client>();
builder.Entity<Graphic>();
.
.
.
.
.
//Shop
builder.Entity<Models.Shop.Store>().ToTable("ShopClient");
builder.Entity<Models.Shop.Category>().ToTable("ShopCategory");
.
.
.
.
.
.
}
}
Startup.cs:
namespace LC.Tools.API
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
this.HostingEnvironment = env;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddDbContext<Data.GenericDbContext>(options => options.UseSqlServer(this.ConnectionString));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, Data.GenericDbContext context)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor,
ForwardLimit = 2
});
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
app.UseStaticFiles();
app.UseMvc();
Data.Debug.Init.Initalize(context, env);
}
private IHostingEnvironment HostingEnvironment { get; set; }
public IConfigurationRoot Configuration { get; }
private string ConnectionString
{
get
{
return this.HostingEnvironment.IsDevelopment() ? Configuration.GetConnectionString("Development") : Configuration.GetConnectionString("Production");
}
}
}
}
例外:アプリケーションを起動しながら
エラーが発生しました。
InvalidOperationException:スコープ付きサービスを解決できません 'LC.Tools.API.Data.GenericDbContext'をルートプロバイダから解決できません。
Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(タイプ サービス種別、のServiceProviderのサービス・プロバイダ)例外: パラメータの型 'LC.Tools.API.Data.GenericDbContext' のサービスを解決できません でした「コンテキスト'タイプのメソッド' Configure 'のタイプ ' LC.Tools.API.Startup '。
Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke(オブジェクト 例えば、IApplicationBuilderビルダー)
InvalidOperationException: Cannot resolve scoped service 'LC.Tools.API.Data.GenericDbContext' from root provider.
Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(タイプ サービス種別、のServiceProviderのサービス・プロバイダ) Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType) Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider プロバイダー、タイプserviceT YPE) Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke(オブジェクト 例えば、IApplicationBuilderビルダー)
これはhttps://stackoverflow.comを助けている場合を参照してください。/questions/44180773/dependency-injection-in-asp-net-core-2-thows-exception – Nkosi
あなたは動作しない 'Configure'メソッドにコンテキストを注入しようとしています。注入されたコンテキストを 'Configure'メソッドから削除し、代わりにサービスプロバイダを注入し、メソッド内のコンテキストを解決しようとします。 – Nkosi
asp.net core 1で動作して以来、最後のバージョンで何が変わったのか知りたいと思います。カスタム実装では必要ないはずだと思っています。 – TheRuler