ASP.NET MVCアプリケーションでDbContextをInstancePerRequest
として登録しています。 (IoC Autofac
)InstancePerRequest DbContext ASP.NET MVC
builder.RegisterType<ADbContext>().As<IADbContext>().InstancePerRequest();
BService
public class BService : IBService
{
readonly IADbContext _dbContext;
public BService(IADbContext dbContext)
{
_dbContext = dbContext;
}
}
がシングルトンとしてIBService
を登録しようと内部使用。
builder.RegisterType<BService>().As<IBService>().SingleInstance();
明らかに、これは私にTAGマッチとエラー
いいえ範囲を与え「AutofacWebRequest」インスタンスが要求されたスコープから見えます。
最も簡単な解決策は、InstancePerRequest
としてIBService
を登録することで、むしろ上記のエラーメッセージよりPerRequest IBService
を有する理由はありません。
シングルトンサービス内でPerRequest
DbContext
を使用するにはどうすればよいですか?
短い回答:できません。リクエストごとにシングルトンにコンテキストを注入する必要があります。正直なところ、これはコードの臭いのように感じ、多分あなたはあなたの設定を再考する必要がありますか? – DavidG
@DavidG恐らく、ベストプラクティスを提案できますか? – tchelidze
ここではベストプラクティスとは思えませんが、文脈を乱しているとシングルトンはおそらく良い考えではないと思います。コンテキストは可能な限り遅く作成し、できるだけ早く破棄する必要があります。また、それらは並行性をサポートしていないため、2つの要求が同時にそれをヒットしようとすると、いくつかの奇妙なエラーが発生します。 – DavidG