私は2.次のクラスを考えてみましょうAsp.netコアを使用しています:contextLifetimeをSingletonに変更するのは、次のエラーを修正する正しい解決策ですか?
public class BlogDbContext: DbContext
{
.....
}
public interface IBlogData { ... }
public class BlogData : IBlogData
{
private BlogDbContext _context;
public BlogData(BlogDbContext context) { ... }
.......
}
次のように私は、デフォルト値contextLifetime: ServiceLifetime.Scoped
を使用し、
public void ConfigureServices(IServiceCollection services)
{
.....
services.AddDbContext<BlogDbContext>(...);
.....
services.AddSingleton<IBlogData, BlogData>();
}
コンパイル、最初の移行と最初のデータベースの更新が行われましたエラーなし。しかし、私は最初にページを訪問するときに次のエラーが発生します。シングルトン 'MyProject.Services.IBlogData' からスコープのサービスを消費することはできません 'MyProject.Data.BlogDbContext':
InvalidOperationExceptionが。私は次のように
contextLifetime
を変更することでエラーを修正する場合
質問
は、それが正しいですか?
public void ConfigureServices(IServiceCollection services)
{
.....
services.AddDbContext<BlogDbContext>(...,contextLifetime: ServiceLifetime.Singleton);
.....
services.AddSingleton<IBlogData, BlogData>();
}
注:この問題は、Asp.Net Core 2.0に固有です。
あなたの 'IBlogData'に' AddScoped'を使うのが良い解決策だと思います。 –