2011-03-15 9 views
5

¿Cuál es el estilo de vida recomendado para la sesión de doc de raven y almacenar bajo una instalación windsor ioc, wcf facility alojada en IIS?ravendb, Castle IoC, Wcf facility - doc session liefstyle

Sigo viendo este error:

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

Aquí está mi configuración:

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); 

     } 
    } 

Respuesta

2

He resuelto esto haciendo de esta manera:

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 
    ); 

y aquí está la 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" 
      }); 
    } 
} 

¡Funciona como un encanto!

Cuestiones relacionadas