-
Notifications
You must be signed in to change notification settings - Fork 10
/
Global.asax.cs
82 lines (69 loc) · 2.8 KB
/
Global.asax.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Dispatcher;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Castle.MicroKernel.Resolvers.SpecializedResolvers;
using Castle.Windsor;
using Microsoft.AspNet.SignalR;
using NEventStore;
using Web.UI.Injection.Installers;
using Web.UI.Injection.WebAPI;
namespace Web.UI
{
// For Castle.Windsor WebApi Injection resolver
// thanks to: http://blog.ploeh.dk/2012/10/03/DependencyInjectioninASP.NETWebAPIwithCastleWindsor/
public class WebApiApplication : System.Web.HttpApplication
{
private readonly IWindsorContainer container;
public WebApiApplication()
{
this.container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
}
public override void Dispose()
{
this.container.Dispose();
base.Dispose();
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
//WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Configure all AutoMapper Profiles
AutoMapperConfig.Configure();
// Install DI mapper
this.container.Install(
new MappersInstaller(),
new CommandStackInstaller(),
new QueryStackInstaller(),
new QueryStackPollingClientInstaller(),
new EventStoreInstaller(),
new ControllersInstaller(),
new LegacyMigrationInstaller()
);
GlobalConfiguration.Configuration.Services.Replace(
typeof(IHttpControllerActivator),
new WindsorCompositionRoot(this.container));
// Use of static reference to Di container to pass to SignalR or other Owin Module (e.g. Hangfire).
// I don't like this approach because it forces to expose the DI container as public throughout all
// the application, and it's not what I want to do
HostingEnvironment.Name = "AspNET";
HostingEnvironment.DIContainer = container;
//Create Event Store
container.Resolve<IStoreEvents>();
}
}
internal static class HostingEnvironment
{
public static string Name { get; set; }
public static IWindsorContainer DIContainer { get; set; }
}
}