forked from gigya/microdot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMicrodotModule.cs
More file actions
77 lines (67 loc) · 2.95 KB
/
Copy pathMicrodotModule.cs
File metadata and controls
77 lines (67 loc) · 2.95 KB
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
#region Copyright
// Copyright 2017 Gigya Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
#endregion
using System;
using Gigya.Microdot.Configuration;
using Gigya.Microdot.ServiceDiscovery;
using Gigya.Microdot.ServiceDiscovery.HostManagement;
using Gigya.Microdot.ServiceProxy;
using Gigya.Microdot.SharedLogic;
using Metrics;
using Ninject;
using Ninject.Activation;
using Ninject.Extensions.Factory;
using Ninject.Modules;
namespace Gigya.Microdot.Ninject
{
/// <summary>
/// Contains all binding except hosting layer
/// </summary>
public class MicrodotModule : NinjectModule
{
private readonly Type[] NonSingletonBaseTypes =
{
typeof(ConsulDiscoverySource),
typeof(RemoteHostPool),
typeof(ConfigDiscoverySource)
};
public override void Load()
{
if (Kernel.CanResolve<Func<long, DateTime>>() == false)
Kernel.Load<FuncModule>();
this.BindClassesAsSingleton(NonSingletonBaseTypes, typeof(ConfigurationAssembly), typeof(ServiceProxyAssembly));
this.BindInterfacesAsSingleton(NonSingletonBaseTypes, typeof(ConfigurationAssembly), typeof(ServiceProxyAssembly), typeof(SharedLogicAssembly),typeof(ServiceDiscoveryAssembly));
Bind<IRemoteHostPoolFactory>().ToFactory();
Kernel.BindPerKey<string, ReachabilityChecker, IServiceDiscovery, ServiceDiscovery.ServiceDiscovery>();
Kernel.BindPerString<IServiceProxyProvider, ServiceProxyProvider>();
Rebind<MetricsContext>()
.ToMethod(c => Metric.Context(GetTypeOfTarget(c).Name))
.InScope(GetTypeOfTarget);
Kernel.Load<ServiceProxyModule>();
Kernel.Load<ConfigObjectsModule>();
}
protected static Type GetTypeOfTarget(IContext context)
{
var type = context.Request.Target?.Member.DeclaringType;
return type ?? typeof(MicrodotModule);
}
}
}