ASP.NET MVC 4和Ninject InRequestScope与嵌入式HttpServer模式下的RavenDb IDocumentSession

时间:2012-05-18 09:34:01

标签: ninject ravendb asp.net-mvc-4

我在使用Ninject的InRequestScope扩展时遇到了一些问题。看起来我正在同一个请求中获取IDocumentSession的新实例。我正在使用ASP.NET MVC 4 beta运行RavenDb作为嵌入式HttpServer。我有一个看起来像这样的bootstrapper类:

public static class ApplicationBootstrapper
{
    private static IKernel _kernel;

private static readonly IDocumentStore DocumentStore = new EmbeddableDocumentStore
{
    DataDirectory  = @"App_Data\RavenDb",
    UseEmbeddedHttpServer = true

}.Initialize();

public static void Initialize()
{
    DocumentStore.Conventions.IdentityPartsSeparator = "-";

    _kernel = new StandardKernel();

    _kernel.Bind<IUserService>().To<UserService>();
    _kernel.Bind<IDocumentStore>().ToConstant(DocumentStore);

    _kernel.Bind<IDocumentSession>().ToMethod(x =>
    {
        var store = x.Kernel.Get<IDocumentStore>();
        return store.OpenSession();
    }).InRequestScope();
}

public static IKernel Kernel
{
    get { return _kernel; }
}

}

我尝试将范围设置为InSingeltonScope。在那种情况下,我确实得到了同样的IDocumentSession,但那当然不是我想要的。关于我在这里做错了什么的任何建议?

1 个答案:

答案 0 :(得分:2)

InRequestScope需要一个Web扩展。在您的情况下,您应该安装并使用Ninject.MVC3而不是自己的Bootstrapper。