Skip to content

Commit db29cf9

Browse files
committed
Explicitly inject deps into setup methods
1 parent 64454e2 commit db29cf9

File tree

6 files changed

+95
-73
lines changed

6 files changed

+95
-73
lines changed

IntegrationEngine.Core/Storage/IntegrationEngineContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ namespace IntegrationEngine.Core.Storage
55
{
66
public class IntegrationEngineContext : DbContext
77
{
8+
public IntegrationEngineContext() { }
9+
810
public IntegrationEngineContext(string connectionString)
911
: base(connectionString)
1012
{ }

IntegrationEngine.Tests/EngineHostConfigurationTest.cs

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ namespace IntegrationEngine.Tests
1818
public class EngineHostConfigurationTest : TestBase<EngineHostConfiguration>
1919
{
2020
public IUnityContainer UnityContainer { get; set; }
21+
public Mock<ILog> MockLog { get; set; }
2122

2223
[SetUp]
2324
public void Setup()
2425
{
2526
Subject.Container = UnityContainer = new UnityContainer();
27+
MockLog = new Mock<ILog>();
2628
}
2729

2830
[Test]
@@ -44,49 +46,66 @@ public void ShouldSetupLogging()
4446
}
4547

4648
[Test]
47-
public void ShouldSetupDatabaseAndRepository()
49+
public void ShouldSetupDatabaseContext()
4850
{
4951
Subject.LoadConfiguration();
5052

51-
Subject.SetupDatabaseRepository();
53+
Subject.SetupDatabaseContext();
5254

5355
Subject.Container.Resolve<IntegrationEngineContext>();
56+
}
57+
58+
[Test]
59+
public void ShouldSetupDatabaseRepository()
60+
{
61+
Subject.LoadConfiguration();
62+
var mockIntegrationEngineContext = new Mock<IntegrationEngineContext>();
63+
64+
Subject.SetupDatabaseRepository(mockIntegrationEngineContext.Object);
65+
5466
Subject.Container.Resolve<IDatabaseRepository>();
5567
}
5668

5769
[Test]
5870
public void ShouldSetupMailClient()
5971
{
6072
Subject.LoadConfiguration();
61-
Subject.SetupLogging();
6273

63-
Subject.SetupMailClient();
74+
Subject.SetupMailClient(MockLog.Object);
6475

6576
Subject.Container.Resolve<IMailClient>();
6677
}
6778

6879
[Test]
69-
public void ShouldSetupElasticClientAndRepository()
80+
public void ShouldSetupElasticClient()
7081
{
7182
Subject.LoadConfiguration();
72-
Subject.SetupLogging();
7383

74-
Subject.SetupElasticClientAndRepository();
84+
Subject.SetupElasticClient();
7585

7686
Subject.Container.Resolve<IElasticClient>();
87+
}
88+
89+
[Test]
90+
public void ShouldSetupElasticsearchRepository()
91+
{
92+
Subject.LoadConfiguration();
93+
var mockElasticClient = new Mock<IElasticClient>();
94+
95+
Subject.SetupElasticsearchRepository(MockLog.Object, mockElasticClient.Object);
96+
7797
Subject.Container.Resolve<IElasticsearchRepository>();
7898
}
7999

80100
[Test]
81101
public void ShouldSetupMessageQueueListener()
82102
{
83103
Subject.LoadConfiguration();
84-
Subject.SetupLogging();
85-
Subject.SetupMailClient();
86-
Subject.SetupDatabaseRepository();
87-
Subject.SetupElasticClientAndRepository();
104+
var mockMailClient = new Mock<IMailClient>();
105+
var mockElasticClient = new Mock<IElasticClient>();
106+
var mockIntegrationEngineContext = new Mock<IntegrationEngineContext>();
88107

89-
Subject.SetupMessageQueueListener();
108+
Subject.SetupMessageQueueListener(MockLog.Object, mockMailClient.Object, mockElasticClient.Object, mockIntegrationEngineContext.Object);
90109

91110
Subject.Container.Resolve<IMessageQueueListener>();
92111
}
@@ -95,9 +114,8 @@ public void ShouldSetupMessageQueueListener()
95114
public void ShouldSetupMessageQueueClient()
96115
{
97116
Subject.LoadConfiguration();
98-
Subject.SetupLogging();
99117

100-
Subject.SetupMessageQueueClient();
118+
Subject.SetupMessageQueueClient(MockLog.Object);
101119

102120
Subject.Container.Resolve<IMessageQueueClient>();
103121
}
@@ -107,11 +125,11 @@ public void ShouldSetupEngineScheduler()
107125
{
108126
Subject.IntegrationJobTypes = new List<Type>();
109127
Subject.LoadConfiguration();
110-
Subject.SetupLogging();
111-
Subject.SetupMessageQueueClient();
112-
Subject.SetupElasticClientAndRepository();
128+
var mockMailClient = new Mock<IMailClient>();
129+
var mockElasticsearchRespository= new Mock<IElasticsearchRepository>();
130+
var mockMessageQueueClient = new Mock<IMessageQueueClient>();
113131

114-
Subject.SetupEngineScheduler();
132+
Subject.SetupEngineScheduler(MockLog.Object, mockMessageQueueClient.Object, mockElasticsearchRespository.Object);
115133

116134
Subject.Container.Resolve<IEngineScheduler>();
117135
}

IntegrationEngine.Tests/IntegrationEngine.Tests.csproj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939
<Reference Include="BeekmanLabs.UnitTesting">
4040
<HintPath>..\packages\BeekmanLabs.UnitTesting.0.0.0\lib\net45\BeekmanLabs.UnitTesting.dll</HintPath>
4141
</Reference>
42+
<Reference Include="Common.Logging.NLog31, Version=3.0.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e, processorArchitecture=MSIL">
43+
<SpecificVersion>False</SpecificVersion>
44+
<HintPath>..\packages\Common.Logging.NLog31.3.0.0\lib\net40\Common.Logging.NLog31.dll</HintPath>
45+
</Reference>
4246
<Reference Include="Microsoft.Practices.Unity.Configuration">
4347
<HintPath>..\packages\Unity.3.5.1404.0\lib\net45\Microsoft.Practices.Unity.Configuration.dll</HintPath>
4448
</Reference>
@@ -48,6 +52,9 @@
4852
<Reference Include="Moq">
4953
<HintPath>..\packages\Moq.4.2.1409.1722\lib\net40\Moq.dll</HintPath>
5054
</Reference>
55+
<Reference Include="NLog">
56+
<HintPath>..\packages\NLog.3.1.0.0\lib\net45\NLog.dll</HintPath>
57+
</Reference>
5158
<Reference Include="System" />
5259
<Reference Include="System.Core" />
5360
<Reference Include="System.Net.Http" />
@@ -153,4 +160,4 @@
153160
<Target Name="AfterBuild">
154161
</Target>
155162
-->
156-
</Project>
163+
</Project>

IntegrationEngine.Tests/app.config

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
1010
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
1111
</dependentAssembly>
12-
<dependentAssembly>
13-
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
14-
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.2.0.0" />
15-
</dependentAssembly>
1612
</assemblyBinding>
1713
</runtime>
1814
</configuration>

IntegrationEngine.Tests/packages.config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<package id="BeekmanLabs.UnitTesting" version="0.0.0" targetFramework="net45" />
44
<package id="Common.Logging" version="3.0.0" targetFramework="net45" />
55
<package id="Common.Logging.Core" version="3.0.0" targetFramework="net45" />
6+
<package id="Common.Logging.NLog31" version="3.0.0" targetFramework="net45" />
67
<package id="Elasticsearch.Net" version="1.4.0" targetFramework="net45" />
78
<package id="EntityFramework" version="6.1.2" targetFramework="net45" />
89
<package id="FX.Configuration" version="0.4.1" targetFramework="net45" />
@@ -11,6 +12,7 @@
1112
<package id="Moq" version="4.2.1409.1722" targetFramework="net45" />
1213
<package id="NEST" version="1.4.0" targetFramework="net45" />
1314
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
15+
<package id="NLog" version="3.1.0.0" targetFramework="net45" />
1416
<package id="NUnit" version="2.6.4" targetFramework="net45" />
1517
<package id="Quartz" version="2.3.1" targetFramework="net45" />
1618
<package id="Unity" version="3.5.1404.0" targetFramework="net45" />

IntegrationEngine/EngineHostConfiguration.cs

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,17 @@ public void Configure(IList<Assembly> assembliesWithJobs)
3838
.Where(x => typeof(IIntegrationJob).IsAssignableFrom(x) && x.IsClass)
3939
.ToList();
4040
LoadConfiguration();
41-
SetupLogging();
42-
TryAndLogFailure("Setup Database Repository", SetupDatabaseRepository);
43-
TryAndLogFailure("Setup Mail Client", SetupMailClient);
44-
TryAndLogFailure("Setup Elastic Client", SetupElasticClientAndRepository);
45-
TryAndLogFailure("Setup RScript Runner", SetupRScriptRunner);
46-
TryAndLogFailure("Setup Message Queue Client", SetupMessageQueueClient);
47-
TryAndLogFailure("Setup Scheduler", SetupEngineScheduler);
48-
TryAndLogFailure("Setup Web Api", SetupWebApi);
49-
TryAndLogFailure("Setup Message Queue Listener", SetupMessageQueueListener);
50-
}
51-
52-
static void TryAndLogFailure(string description, Action action)
53-
{
54-
try
55-
{
56-
action();
57-
}
58-
catch (Exception exception)
59-
{
60-
var log = Common.Logging.LogManager.GetLogger(typeof(EngineHost));
61-
log.Error(description, exception);
62-
}
41+
var log = SetupLogging();
42+
var dbContext = SetupDatabaseContext();
43+
SetupRScriptRunner();
44+
SetupDatabaseRepository(dbContext);
45+
var mailClient = SetupMailClient(log);
46+
var elasticClient = SetupElasticClient();
47+
var elasticsearchRepository = SetupElasticsearchRepository(log, elasticClient);
48+
var messageQueueClient = SetupMessageQueueClient(log);
49+
SetupEngineScheduler(log, messageQueueClient, elasticsearchRepository);
50+
SetupMessageQueueListener(log, mailClient, elasticClient, dbContext);
51+
SetupWebApi();
6352
}
6453

6554
public void LoadConfiguration()
@@ -68,7 +57,7 @@ public void LoadConfiguration()
6857
Container.RegisterInstance<EngineConfiguration>(Configuration);
6958
}
7059

71-
public void SetupLogging()
60+
public ILog SetupLogging()
7261
{
7362
var config = Configuration.NLogAdapter;
7463
var properties = new NameValueCollection();
@@ -77,13 +66,19 @@ public void SetupLogging()
7766
Common.Logging.LogManager.Adapter = new NLogLoggerFactoryAdapter(properties);
7867
var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
7968
Container.RegisterInstance<ILog>(log);
69+
return log;
70+
}
71+
72+
public IntegrationEngineContext SetupDatabaseContext()
73+
{
74+
var integrationEngineContext = new DatabaseInitializer(Configuration.Database).GetDbContext();
75+
Container.RegisterInstance<IntegrationEngineContext>(integrationEngineContext);
76+
return integrationEngineContext;
8077
}
8178

82-
public void SetupDatabaseRepository()
79+
public void SetupDatabaseRepository(IntegrationEngineContext integrationEngineContext)
8380
{
84-
var dbContext = new DatabaseInitializer(Configuration.Database).GetDbContext();
85-
Container.RegisterInstance<IntegrationEngineContext>(dbContext);
86-
Container.RegisterInstance<IDatabaseRepository>(new DatabaseRepository(dbContext));
81+
Container.RegisterInstance<IDatabaseRepository>(new DatabaseRepository(integrationEngineContext));
8782
}
8883

8984
public void SetupWebApi()
@@ -92,57 +87,54 @@ public void SetupWebApi()
9287
IntegrationEngineApi.Start((new UriBuilder("http", config.HostName, config.Port)).Uri.AbsoluteUri);
9388
}
9489

95-
public void SetupMailClient()
90+
public IMailClient SetupMailClient(ILog log)
9691
{
97-
var log = Container.Resolve<ILog>();
98-
9992
var mailClient = new MailClient() {
10093
MailConfiguration = Configuration.Mail,
10194
Log = log,
10295
};
10396
Container.RegisterInstance<IMailClient>(mailClient);
97+
return mailClient;
10498
}
10599

106-
public void SetupMessageQueueListener()
100+
public void SetupMessageQueueListener(ILog log, IMailClient mailClient, IElasticClient elasticClient, IntegrationEngineContext integrationEngineContext)
107101
{
108102
var rabbitMqListener = new RabbitMQListener() {
109103
IntegrationJobTypes = IntegrationJobTypes,
110104
MessageQueueConnection = new MessageQueueConnection(Configuration.MessageQueue),
111105
MessageQueueConfiguration = Configuration.MessageQueue,
112-
Log = Container.Resolve<ILog>(),
113-
MailClient = Container.Resolve<IMailClient>(),
114-
IntegrationEngineContext = Container.Resolve<IntegrationEngineContext>(),
115-
ElasticClient = Container.Resolve<IElasticClient>(),
106+
Log = log,
107+
MailClient = mailClient,
108+
IntegrationEngineContext = integrationEngineContext,
109+
ElasticClient = elasticClient,
116110
};
117111
Container.RegisterInstance<IMessageQueueListener>(rabbitMqListener);
118112
rabbitMqListener.Listen();
119113
}
120114

121-
public void SetupMessageQueueClient()
115+
public IMessageQueueClient SetupMessageQueueClient(ILog log)
122116
{
123117
var messageQueueClient = new RabbitMQClient() {
124118
MessageQueueConnection = new MessageQueueConnection(Configuration.MessageQueue),
125119
MessageQueueConfiguration = Configuration.MessageQueue,
126-
Log = Container.Resolve<ILog>(),
120+
Log = log,
127121
};
128122
Container.RegisterInstance<IMessageQueueClient>(messageQueueClient);
123+
return messageQueueClient;
129124
}
130125

131-
public void SetupEngineScheduler()
126+
public void SetupEngineScheduler(ILog log, IMessageQueueClient messageQueueClient, IElasticsearchRepository elasticsearchRepository)
132127
{
133-
var log = Container.Resolve<ILog>();
134128
var engineScheduler = new EngineScheduler() {
135129
Scheduler = StdSchedulerFactory.GetDefaultScheduler(),
136130
IntegrationJobTypes = IntegrationJobTypes,
137-
MessageQueueClient = Container.Resolve<IMessageQueueClient>(),
131+
MessageQueueClient = messageQueueClient,
138132
Log = log,
139133
};
140134
Container.RegisterInstance<IEngineScheduler>(engineScheduler);
141135
engineScheduler.Start();
142-
143-
var elasticRepo = Container.Resolve<IElasticsearchRepository>();
144-
var simpleTriggers = elasticRepo.SelectAll<SimpleTrigger>();
145-
var allCronTriggers = elasticRepo.SelectAll<CronTrigger>();
136+
var simpleTriggers = elasticsearchRepository.SelectAll<SimpleTrigger>();
137+
var allCronTriggers = elasticsearchRepository.SelectAll<CronTrigger>();
146138
var cronTriggers = allCronTriggers.Where(x => !string.IsNullOrWhiteSpace(x.CronExpressionString));
147139
foreach (var trigger in simpleTriggers)
148140
engineScheduler.ScheduleJobWithTrigger(trigger);
@@ -157,21 +149,26 @@ public void SetupRScriptRunner()
157149
Container.RegisterInstance<RScriptRunner>(new RScriptRunner());
158150
}
159151

160-
public void SetupElasticClientAndRepository()
152+
public IElasticClient SetupElasticClient()
161153
{
162154
var config = Configuration.Elasticsearch;
163155
var serverUri = new UriBuilder(config.Protocol, config.HostName, config.Port).Uri;
164156
var settings = new ConnectionSettings(serverUri, config.DefaultIndex);
165157
var elasticClient = new ElasticClient(settings);
166-
var log = Container.Resolve<ILog>();
167158
Container.RegisterInstance<IElasticClient>(elasticClient);
168-
var elasticRepo = new ElasticsearchRepository() {
169-
ElasticClient = elasticClient,
159+
return elasticClient;
160+
}
161+
162+
public IElasticsearchRepository SetupElasticsearchRepository(ILog log, IElasticClient elasticClient)
163+
{
164+
var elasticsearchRepository = new ElasticsearchRepository() {
170165
Log = log,
166+
ElasticClient = elasticClient,
171167
};
172-
if (!elasticRepo.IsServerAvailable())
168+
if (!elasticsearchRepository.IsServerAvailable())
173169
log.Warn("Elasticsearch server does not appear to be available.");
174-
Container.RegisterInstance<IElasticsearchRepository>(elasticRepo);
170+
Container.RegisterInstance<IElasticsearchRepository>(elasticsearchRepository);
171+
return elasticsearchRepository;
175172
}
176173

177174
public void Dispose()

0 commit comments

Comments
 (0)