0

次の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 つのサービスの実装は、セッション オブジェクトの同じインスタンスを受け取りますか?

4

1 に答える 1

1

InRequestScope バインド オブジェクトは、リクエストごとに 1 回作成されます。同じリクエストで両方のサービスを使用すると、同じインスタンスが取得されます。

于 2013-10-22T13:52:35.300 に答える