次のninject構成があります
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
ConfigureRavenDB(kernel);
RegisterServices(kernel);
var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
return kernel;
}
そして私の RavenDB ストア構成
private static IDocumentStore ConfigureRavenDB(IKernel container)
{
var store = new DocumentStore
{
ConnectionStringName = "SpurroConnection"
};
store.Initialize();
container.Bind<IDocumentStore>().ToConstant(store).InSingletonScope();
container.Bind<IDocumentSession>().ToMethod(CreateSession).InRequestScope();
return store;
}
セッション コンテキスト管理
private static IDocumentSession CreateSession(IContext context)
{
var store = context.Kernel.Get<IDocumentStore>();
if(store != null)
{
return store.OpenSession();
}
throw new Exception("Unable to Bind the IDocument session for this user request");
}
そして、サービスクラスがあります
public class ServiceA
{
private readonly IDocumentSession _documentSession;
public ServiceA(IDocumentSession documentSession)
{
_documentSession = documentSession;
}
}
public class ServiceB
{
private readonly IDocumentSession _documentSession;
public ServiceB(IDocumentSession documentSession)
{
_documentSession = documentSession;
}
}
私の質問はこれです
Ninject 構成での createSession の呼び出し。すべてのリクエストの開始時に呼び出されますか、それともアプリケーションの起動中に一度呼び出され、結果のインスタンスがリクエストごとに注入されますか?
2 つのサービスの実装は、セッション オブジェクトの同じインスタンスを受け取りますか?