【问题标题】:ravendb, castle IoC ,Wcf facility - doc session liefstyleravendb,城堡 IoC,Wcf 设施 - 文档会话 liefstyle
【发布时间】:2011-03-15 10:30:56
【问题描述】:

在 IIS 中托管的 Windsor ioc、wcf 设施设置下,raven doc 会话和存储的推荐生活方式是什么?

我一直看到这个错误:

Error TempPathInUse (JET_errTempPathInUse, Temp path already used by another database instance)`

这是我的设置:

public class RavenInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
                Component.For<IDocumentStore>().ImplementedBy<DocumentStore>()
                    .DependsOn(new { connectionStringName = "RavenConnectionString" })
                    .OnCreate(DoInitialisation)
                    .LifeStyle.Singleton,
                Component.For<IDocumentSession>()
                    .UsingFactoryMethod(GetDocumentSesssion)
                    .LifeStyle.Transient
                );

            container.Register(Component.For<IEventSeriesRepository>().ImplementedBy<EventSeriesRepository>().LifeStyle.Transient);
            container.Register(Component.For<IEventInstanceRepository>().ImplementedBy<EventInstanceRepository>().LifeStyle.Transient);
            container.Register(
                Component.For<IProductionCompanyRepository>().ImplementedBy<ProductionCompanyRepository>().LifeStyle.
                    Transient);
        }

        static IDocumentSession GetDocumentSesssion(IKernel kernel)
        {
            var store = kernel.Resolve<IDocumentStore>();
            return store.OpenSession();
        }

        public static void DoInitialisation(IKernel kernel, IDocumentStore store)
        {
            store.Initialize();
            IndexCreation.CreateIndexes(typeof(EventSeries_ByName).Assembly, store);

        }
    }

【问题讨论】:

    标签: wcf castle-windsor ravendb wcffacility


    【解决方案1】:

    在 Raven 论坛中提出了关于生命周期的相同问题: https://groups.google.com/forum/#!topic/ravendb/wUgULf3eoCg

    Ayende 的回应是: 文档存储的单例,会话的瞬态/Web 请求。

    【讨论】:

      【解决方案2】:

      我通过这样做解决了这个问题:

      container.Register(
          Component
              .For<IRavenSessionFactoryBuilder>()
              .ImplementedBy<RavenSessionFactoryBuilder>()
              .LifeStyle.Singleton
          );
      
      container.Register(
          Component
              .For<IDocumentSession>()
              .UsingFactoryMethod(kernel => 
                  kernel.Resolve<IRavenSessionFactoryBuilder>()
                     .GetSessionFactory()
                     .CreateSession()
              )
              .LifeStyle.Transient
          );
      
      // This is the repository making use of the IDocumentSession
      container.Register(
          Component
              .For<IDomainRepository>()
              .ImplementedBy<DomainRepository>()
              .LifeStyle.Transient
          );
      

      这里是 RavenSessionFactoryBuilder

      public class RavenSessionFactoryBuilder : IRavenSessionFactoryBuilder
      {
          private IRavenSessionFactory ravenSessionFactory;
      
          public IRavenSessionFactory GetSessionFactory()
          {
              return ravenSessionFactory ?? (ravenSessionFactory = CreateSessionFactory());
          }
      
          private static IRavenSessionFactory CreateSessionFactory()
          {
              return new RavenSessionFactory(
                  new DocumentStore {
                      Url = "http://localhost:8080"
                  });
          }
      }
      

      它就像一个魅力!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多