当前位置:  开发笔记 > 编程语言 > 正文

Ninject OnePerRequestBehaviour似乎无法正常工作?

如何解决《NinjectOnePerRequestBehaviour似乎无法正常工作?》经验,为你挑选了1个好方法。

我一直在我的网络应用程序中使用Ninject作为我的IOC.这很好,我认为它工作得很好,但我一直在尝试将一些接口/类注册为OnePerRequestBehaviour,但它似乎并没有真正使用这种行为.代码运行正常但在我的一个类中,它延迟从数据库加载页面信息,然后一旦加载它就不需要命中数据库.

我的问题是,在我的第一个请求中加载了延迟加载的属性,然后我请求下一页使用该类的相同实例.我知道这个的原因是因为类没有再次实例化,并且已经设置了延迟加载的属性.

这段代码在我的模块类中:

public class NinjectModule : StandardModule
{
    public override void Load()
    {
        Bind().To().Using();


        Bind().ToSelf().Using();
        Bind().ToSelf().Using();
    }
}

然后在继承自NinjectHttpApplication的Global.asax中,我有以下内容:

        protected override IKernel CreateKernel()
        {
            OnePerRequestModule module = new OnePerRequestModule();
            module.Init(this);

            KernelOptions options = new KernelOptions();
            options.InjectNonPublicMembers = true;

            IKernel kernel = new StandardKernel(options, new NinjectModule());

            return kernel;
        }

对CmsService的第一次调用是在global.asax以及authenticate_request中:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            if (HttpContext.Current.Request.Url.AbsoluteUri.Contains(".aspx") &&
                !HttpContext.Current.Request.Url.AbsoluteUri.Contains(".aspx/"))
            {
                CmsService facCMS = HttpKernelFactory.Get();
                ContentPage page = facCMS.GetCurrentPage();

                // DO Logic based on the page being brought back
            }
        }

上面的GetCurrentPage()代码:

public ContentPage GetCurrentPage()
{
    if (_currentPage != null)
        return _currentPage;

    return GetCurrentPage(_isAdmin);
}

所以你可以看到_currentPage变量只有在之前没有设置时才加载,每个请求应该是一次,但是Ninject似乎并没有按照请求创建CmsService它似乎创建了一个非常大量的时间.

Deos任何人都知道为什么这对我不起作用或任何示例代码肯定在哪里工作?

谢谢



1> Nate Kohari..:

OnePerRequestModule是一个HttpModule,需要加载到您的ASP.NET管道才能工作.如果将其添加到web.config,它应该工作:

IIS7:

 
  
    
  

IIS6:


  
    
  

在Ninject2(尚未发布)中,OnePerRequest行为得到了极大的改进.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有