您现在的位置是:主页 > news > 建站平台转型/怎么接游戏推广的业务

建站平台转型/怎么接游戏推广的业务

admin2025/6/30 6:23:22news

简介建站平台转型,怎么接游戏推广的业务,西安网站托管专业公司,进入这个网站在asp.net 4.0中,提供了一种不通过修改配置文件注册Module的方法。从.net3.5开始,新提供的PreApplicationStartMethodAttribute特性可以应用在程序集上,使得自定义的网站初始化代码可以在web应用程序的Application_Start初始化环节之前就执行…

建站平台转型,怎么接游戏推广的业务,西安网站托管专业公司,进入这个网站在asp.net 4.0中,提供了一种不通过修改配置文件注册Module的方法。从.net3.5开始,新提供的PreApplicationStartMethodAttribute特性可以应用在程序集上,使得自定义的网站初始化代码可以在web应用程序的Application_Start初始化环节之前就执行…

在asp.net 4.0中,提供了一种不通过修改配置文件注册Module的方法。从.net3.5开始,新提供的PreApplicationStartMethodAttribute特性可以应用在程序集上,使得自定义的网站初始化代码可以在web应用程序的Application_Start初始化环节之前就执行。这个步骤甚至在动态编译和执行Application_Start之前。对于每个程序集,可以定义一次,PreApplicationStartMethodAttribute定义如下:

复制代码
#region Assembly System.Web.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Web.dll
#endregionusing System;namespace System.Web
{// Summary://     Provides expanded support for application startup.[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]public sealed class PreApplicationStartMethodAttribute : Attribute{// Summary://     Initializes a new instance of the System.Web.PreApplicationStartMethodAttribute//     class.//// Parameters://   type://     An object that describes the type of the startup method..////   methodName://     An empty parameter signature that has no return value.public PreApplicationStartMethodAttribute(Type type, string methodName);// Summary://     Gets the associated startup method.//// Returns://     A string that contains the name of the associated startup method.public string MethodName { get; }//// Summary://     Gets the type that is returned by the associated startup method.//// Returns://     An object that describes the type of the startup method.public Type Type { get; }}
}
复制代码

Type用来指定定义了初始化方法的类型,MethodName用来指定将要执行的初始化方法。

通过这种方式,我们可以不在配置文件中固定配置HttpModule,而是定义一个方法,这个方法可以返回需要动态注册的HttpModule,将这个方法以委托的方式等级在一个集合中。在网站启动之前后,每当HttpApplicationFactory创建一个HttpApplication对象,完成正常注册的HttpModule创建及初始化之后,再来创建我们动态注册的这些HttpModule。

对于HttpApplication来说,其Init方法将在网站正常注册的HttpModule创建及注册之后被调用,用来完成自定义的HttpApplication初始化。我们可以在这个时间点动态注册HttpModule。在asp.net网站中,Global.asax文件用来生成一个HttpApplication的派生类。这个类用来创建网站中使用的HttpApplication对象,这就为我们提供了一个时间点,我们可以重写这个派生类的Init方法,完成动态注册HttpModule创建和注册工作。

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;namespace HttpRequestDemo
{public class Global : System.Web.HttpApplication{private List<IHttpModule> dynamicModules;public override void Init(){base.Init();this.dynamicModules = DynamicHttpModuleManager.GetModules();foreach (var item in this.dynamicModules){item.Init(this);}}protected void Application_Start(object sender, EventArgs e){}}
复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;namespace UserModule
{public delegate IHttpModule CreateDynamicHttpModule();public static class DynamicHttpModuleManager{private static List<CreateDynamicHttpModule> _createModuleHandlerList = new List<CreateDynamicHttpModule>();/// <summary>/// 在网站初始化之前,将需要注册的Module类型记录在一个集合中/// </summary>/// <param name="handler"></param>public static void RegisterDynamicModule(CreateDynamicHttpModule handler){_createModuleHandlerList.Add(handler);}/// <summary>/// 获取要注册的HttpModule/// </summary>/// <returns></returns>public static List<IHttpModule> GetModules(){List<IHttpModule> lst = new List<IHttpModule>();foreach (var item in _createModuleHandlerList){IHttpModule module = item();lst.Add(module);}return lst;}}}
复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;namespace UserModule
{//自定义的HttpModule中,添加一个Rgister方法,用来注册public class OnlineUserModule:IHttpModule{public static void Register(){DynamicHttpModuleManager.RegisterDynamicModule(() => new OnlineUserModule());}public void Dispose(){throw new NotImplementedException();}public void Init(HttpApplication context){throw new NotImplementedException();}}
}
复制代码

最后在项目的AssemblyInfo.cs文件中增加PreApplicationStartMethod特征完成动态注册。

[assembly: PreApplicationStartMethod(typeof(UserModule.OnlineUserModule), "Register")]

 注意这里的AssemblyInfo.cs是指的你的程序集的。在里面添加这个PreApplicationStartMethod。然后运行web项目,你会发现,断点会进入你的自定义的HttpModule。

博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5244839.html