如果添加属性,为OWIN添加nuget包后:
[assembly: OwinStartup(typeof(MyProject.Startup))]
Run Code Online (Sandbox Code Playgroud)
然后是类MyProject.Startup的方法
public void Configuration(IAppBuilder app)
Run Code Online (Sandbox Code Playgroud)
被叫.怎么称呼?web.config中对OWIN的唯一引用是程序集绑定重定向.我的项目中没有其他引用可以导致识别此属性的http模块.如果我查看堆栈跟踪,我会看到这些行:
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(System.Web.HttpApplication context) Unknown
System.Web.dll!System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(System.IntPtr appContext, System.Web.HttpContext context, System.Reflection.MethodInfo[] handlers) Unknown
Run Code Online (Sandbox Code Playgroud)
这表明OWIN已经注册为IIS的事件订阅,但是这是如何发生的?这是否很难在框架中查找程序集引用?
ASP.NET 4引入了PreApplicationStartMethodAttribute类.此功能的主要用途是启用在Application_Start中无法完成的任务,因为它为时已晚.例如,注册构建提供程序并添加程序集引用.因此,该属性允许代码在应用程序启动时尽早在ASP.NET管道中运行,甚至在Application_Start之前.
使用此属性将是:
[assembly: PreApplicationStartMethod(typeof(SomeClassLib.Initializer), "Initialize")]
Run Code Online (Sandbox Code Playgroud)
第一个参数是类型,第二个参数是方法.该方法将是没有参数的public static void方法,如下面的代码:
public static class Initializer
{
public static void Initialize() {
// Whatever can we do here?
}
}
Run Code Online (Sandbox Code Playgroud)
的卡塔纳源代码使用PreApplicationStartMethod挂接到应用程序启动:
[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "Initialize")]
Run Code Online (Sandbox Code Playgroud)
这将调用该Initialize()方法PreApplicationStart:
public static class PreApplicationStart
{
private const string TraceName = "Microsoft.Owin.Host.SystemWeb.PreApplicationStart";
/// <summary>
/// Registers the OWIN request processing module.
/// </summary>
public static void Initialize()
{
try
{
if (OwinBuilder.IsAutomaticAppStartupEnabled)
{
HttpApplication.RegisterModule(typeof(OwinHttpModule));
}
}
catch (Exception exception1)
{
Exception exception = exception1;
ITrace trace = TraceFactory.Create("Microsoft.Owin.Host.SystemWeb.PreApplicationStart");
trace.WriteError(Resources.Trace_RegisterModuleException, exception);
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在线
HttpApplication.RegisterModule(typeof(OwinHttpModule));
Run Code Online (Sandbox Code Playgroud)
OwinHttpModule接管并进入OwinBuilder和OwinAppContext流程,它们在程序集中查找Startup类以调用Configuration方法.
| 归档时间: |
|
| 查看次数: |
3204 次 |
| 最近记录: |