WebActivatorEx vs OwinStartup
asp.net, owin, web
Solution
They both are similar at a high level in the sense that they allow you to carry out initialization of your web application, but they are different in some important ways as below:
- Methods targeted by `WebActivatorEx.PreApplicationStartMethodAttribute` will execute before the Application has started up. This allows you to do things like injecting an HttpModule etc.
- Methods targeted by `OwinStartupAttribute` will execute after Application has initialized. This is because this kind of startup is invoked by `OwinHttpModule` which in itself is injected in using `System.Web.PreApplicationStartMethodAttribute`.
- Owin startup can be disabled via configuration by using an appsetting within web.config of `owin:AutomaticAppStartup`
- There is also `System.Web.PreApplicationStartMethodAttribute` which as of .NET 4.5 can be used multiple times within an assembly.
So to summarise, this is the order of execution of methods depending on the attributes used.
- `System.Web.PreApplicationStartMethodAttribute`
- `WebActivatorEx.PreApplicationStartMethodAttribute`
- Global.asax (`Application_Start` method)
- `OwinStartupAttribute`
Problem
In a WebAPI application for example, what is the difference between ``` [assembly: OwinStartup(typeof(MyClass), "MyMethod")] ``` and ``` [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyClass), "MyMethod")] ``` ?