我使用的是简单的注射器为国际奥委会在MVC 3 Web应用程序。 我使用RavenDB用于数据存储。 有在一个MVC 3应用程序中使用RavenDB几方面的考虑。 我搜索了一些关于如何连接,建立一个国际奥委会使用RavenDB但还没有找到如何电线起来简单注射器使用RavenDB。 任何人都可以解释如何线了简单的注射器在MVC 3 web应用程序使用RavenDB?
谢谢。
我使用的是简单的注射器为国际奥委会在MVC 3 Web应用程序。 我使用RavenDB用于数据存储。 有在一个MVC 3应用程序中使用RavenDB几方面的考虑。 我搜索了一些关于如何连接,建立一个国际奥委会使用RavenDB但还没有找到如何电线起来简单注射器使用RavenDB。 任何人都可以解释如何线了简单的注射器在MVC 3 web应用程序使用RavenDB?
谢谢。
按照RavenDb教程 ,您的应用程序需要只有一个IDocumentStore
实例(每个数据库我假设)。 一个IDocumentStore
是线程安全的。 它产生IDocumentSession
情况下,他们代表的工作单位在RavenDB,而这些都不是线程安全的。 因此,你应该不会线程之间共享会话。
如何建立你的使用容器RavenDb主要取决于应用程序的设计。 现在的问题是:你想在注入到消费者带来什么? 该IDocumentStore
,或IDocumentSession
?
当你用走IDocumentStore
,您的注册看起来是这样的:
// Composition Root
IDocumentStore store = new DocumentStore
{
ConnectionStringName = "http://localhost:8080"
};
store.Initialize();
container.RegisterSingle<IDocumentStore>(store);
消费者可能是这样的:
public class ProcessLocationCommandHandler
: ICommandHandler<ProcessLocationCommand>
{
private readonly IDocumentStore store;
public ProcessLocationCommandHandler(IDocumentStore store)
{
this.store = store;
}
public void Handle(ProcessLocationCommand command)
{
using (var session = this.store.OpenSession())
{
session.Store(command.Location);
session.SaveChanges();
}
}
}
因为IDocumentStore
注入,消费者自己负责管理会议:创建,保存和处理。 这对于小型应用十分方便,或者例如隐藏背后的RavenDb数据库时库 ,在那里你调用session.SaveChanges()
里面repository.Save(entity)
方法。
然而,我发现这种类型的使用工作单元的是大型应用程序有问题。 所以,你可以做什么,而不是,是注入IDocumentSession
到消费者。 在这种情况下,您的注册看起来是这样的:
IDocumentStore store = new DocumentStore
{
ConnectionStringName = "http://localhost:8080"
};
store.Initialize();
// Register the IDocumentSession per web request
// (will automatically be disposed when the request ends).
container.RegisterPerWebRequest<IDocumentSession>(
() => store.OpenSession());
请注意,您所需要的简单注射器ASP.NET集成NuGet包 (或包括SimpleInjector.Integration.Web.dll到您的项目,其中包括在默认下载),以便能够使用RegisterPerWebRequest
扩展方法。
现在的问题是,从哪里调用session.SaveChanges()
还有一个有关注册每web请求,其还解决了有关的问题作品单元问题SaveChanges
。 请把这个答案很好看: 每个web请求一个的DbContext ......为什么呢? 。 当您更换字DbContext
与IDocumentSession
和DbContextFactory
与IDocumentStore
,你将能够在RavenDb的情况下阅读。 请注意,RavenDb工作时可能的商业交易或成交一般的概念并不是那么重要,但我真的不知道。 这是你必须找到自己。