Ravendb, Castle IOC, WCF -Einrichtung - Doc Session LiefStyle
-
24-10-2019 - |
Frage
Was ist der empfohlene Lebensstil für Raven Doc Session and Store unter einem in IIS veranstalteten WCF -Einrichtung in Windsor IOC, WCF -Einrichtung?
Ich sehe diesen Fehler immer wieder:
Error TempPathInUse (JET_errTempPathInUse, Temp path already used by another database instance)`
Hier ist mein Setup:
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);
}
}
Lösung
Dieselbe Frage zum Lebenszyklus wurde in den Raven -Foren aufgeworfen:https://groups.google.com/forum/#!topic/ravendb/wugulf3eocg
Die Antwort von Ayende war: Singleton für den Dokumentgeschäft, Transient / Web -Anfrage für die Sitzung.
Andere Tipps
Ich habe das gelöst, indem ich so tue:
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
);
Und hier ist der 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"
});
}
}
Es wirkt wie ein Zauber!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow