码迷,mamicode.com
首页 > 其他好文 > 详细

IOC容器特性注入第七篇:请求上下文作用域

时间:2014-06-16 08:17:19      阅读:381      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

Ninject的对象作用域:

Transient

.InTransientScope()

每次调用创建新实例。

Singleton

.InSingletonScope()

单例,仅创建一个实例。

Thread

.InThreadScope()

每一个线程创建一个实例。

Request

.InRequestScope()

每当Web请求发起时创建一个实例,结束请求时释放实例

 

由于我们使用的web开发,所以一般都是InReuqestScope()的作用域,Kooboo对Ninject的作用域没有用,而是用自己了的扩展类,再注册httpModule

1.OnePerRequestHttpModule(IhttpModule扩展类,每次http请求结束从Ninject的缓存清空实例):

 

bubuko.com,布布扣
public sealed class OnePerRequestHttpModule : GlobalKernelRegistration, IHttpModule {

        public OnePerRequestHttpModule() {
            this.ReleaseScopeAtRequestEnd = true;
        }

        /// <summary>
        /// 把当前实例从HTTP上下文给清空 只保存HTTP请求作用域
        /// </summary>
        public void DeactivateInstancesForCurrentHttpRequest() {
            if (this.ReleaseScopeAtRequestEnd) {
                HttpContext context = HttpContext.Current;
                base.MapKernels((IKernel kernel)=>{
                    kernel.Components.Get<ICache>().Clear(context);
                });
            }
        }

        public void Dispose() {
        }
        public void Init(HttpApplication application) {
            application.EndRequest += (object o, EventArgs e)=> {
                this.DeactivateInstancesForCurrentHttpRequest();
            };
        }

        public bool ReleaseScopeAtRequestEnd { get; set; }

    }
bubuko.com,布布扣

 

2.NinjectWebCommonStartupTask(注册类)

bubuko.com,布布扣
//把请求周期注册到模块中
[assembly: System.Web.PreApplicationStartMethod(typeof(DaHua.Common.Runtime.Dependency.Ninject.NinjectWebCommonStartupTask), "Start")]
namespace DaHua.Common.Runtime.Dependency.Ninject {
    public static class NinjectWebCommonStartupTask {
        public static void Start() {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        }
    }
}
bubuko.com,布布扣

这2个类,就可以把IOC容器的每次请求的实例 只在Http请求的周期内,http结束就失效。保证每个实例的对象作用域只能在http请求范围内

 源代码下载:

Ninject.Ioc.Core.zip

IOC容器特性注入第七篇:请求上下文作用域,布布扣,bubuko.com

IOC容器特性注入第七篇:请求上下文作用域

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/flyfish2012/p/3783679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!