-
Notifications
You must be signed in to change notification settings - Fork 0
/
MeasuredStartupFixture.cs
76 lines (61 loc) · 2.66 KB
/
MeasuredStartupFixture.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
using System.Web.Http;
using System.Web.Http.Dependencies;
namespace MeasureIt.Web.Http.Autofac
{
using Controllers;
using Discovery;
using Owin;
using global::Autofac;
using global::Autofac.Integration.WebApi;
public class MeasuredStartupFixture : Startup<IContainer>
{
internal static HttpConfiguration InternalConfig { get; private set; }
private void Install<TDiscoveryService>()
where TDiscoveryService : class, IInstallerInstrumentationDiscoveryService
{
var discoveryService = Container.Resolve<TDiscoveryService>();
// TODO: TBD: in a production environment, this should probably go in a true installer of some sort...
using (var context = discoveryService.GetInstallerContext())
{
context.Install();
}
}
private static InstrumentationDiscoveryOptions CreateDiscoveryOptions()
{
return new InstrumentationDiscoveryOptions
{
ThrowOnInstallerFailure = false,
ThrowOnUninstallerFailure = false,
Assemblies = new[]
{
typeof(MeasuredController).Assembly
, typeof(AverageTimePerformanceCounterAdapter).Assembly
}
};
}
protected override void OnConfiguration(IAppBuilder app, HttpConfiguration config)
{
InternalConfig = config;
var builder = new ContainerBuilder();
#pragma warning disable 612
builder.RegisterApiServices<
AutofacWebApiDependencyResolver
, AutofacHttpControllerActivator
, TraceExceptionLogger>()
.EnableApiMeasurements<
IHttpActionInstrumentationDiscoveryService
, HttpActionInstrumentationDiscoveryService>(CreateDiscoveryOptions)
.RegisterApiControllers(typeof(MeasuredController).Assembly)
;
#pragma warning restore 612
var container = Container = builder.Build();
// Very nearly last but not least inform the configuration of our Dependency Resolver.
config.DependencyResolver = container.Resolve<IDependencyResolver>();
/* TODO: TBD: code such as this, Install<?>() perhaps goes better in a dedicated installer,
* or at a bare minimum quarantined behind a decidated server side controller. */
Install<IInstallerInstrumentationDiscoveryService>();
Install<IHttpActionInstrumentationDiscoveryService>();
base.OnConfiguration(app, config);
}
}
}