Skip to content

Commit fcedbf8

Browse files
committed
Use IIntegrationPoint to load integration points
1 parent cf74b69 commit fcedbf8

File tree

8 files changed

+54
-18
lines changed

8 files changed

+54
-18
lines changed
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Data.Entity.ModelConfiguration.Conventions;
34
using System.Linq;
45
using System.Text;
56
using System.Threading.Tasks;
67

78
namespace IntegrationEngine.Core.Configuration
89
{
9-
[AttributeUsage(AttributeTargets.Class)]
10-
public class IntegrationPointConfigurationAttribute : Attribute
10+
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)]
11+
public class IntegrationPointConfigurationByAttribute : Attribute
1112
{
12-
public string Name { get; set; }
13+
public IIntegrationPointConfiguration IntegrationPointConfiguration { get; set; }
1314

14-
//public IntegrationPointConfigurationAttribute(string name)
15-
//{
16-
// Name = name;
17-
//}
15+
public IntegrationPointConfigurationByAttribute(IIntegrationPointConfiguration integrationPointConfiguration)
16+
{
17+
IntegrationPointConfiguration = integrationPointConfiguration;
18+
}
1819
}
1920
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Nest;
2+
using IntegrationEngine.Core.IntegrationPoint;
3+
using IntegrationEngine.Core.Configuration;
4+
5+
namespace IntegrationEngine.Core.Elasticsearch
6+
{
7+
public class ElasticClientAdapter : ElasticClient, IIntegrationPoint<IElasticsearchConfiguration>
8+
{}
9+
}

IntegrationEngine.Core/IntegrationEngine.Core.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,12 @@
8383
<Link>Properties\SharedAssemblyInfo.cs</Link>
8484
</Compile>
8585
<Compile Include="Configuration\ElasticsearchConfiguration.cs" />
86+
<Compile Include="Configuration\IntegrationPointConfigurationByAttribute.cs" />
8687
<Compile Include="Configuration\MailConfiguration.cs" />
8788
<Compile Include="Configuration\RabbitMQConfiguration.cs" />
89+
<Compile Include="Elasticsearch\ElasticClientAdapter.cs" />
90+
<Compile Include="IntegrationPoint\IIntegrationPointT.cs" />
91+
<Compile Include="IntegrationPoint\IIntegrationPoint.cs" />
8892
<Compile Include="Jobs\IIntegrationJob.cs" />
8993
<Compile Include="Jobs\ILogJob.cs" />
9094
<Compile Include="Jobs\IMailJob.cs" />
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Security.Cryptography.X509Certificates;
2+
using IntegrationEngine.Core.Configuration;
3+
4+
namespace IntegrationEngine.Core.IntegrationPoint
5+
{
6+
public interface IIntegrationPoint
7+
{
8+
}
9+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Security.Cryptography.X509Certificates;
2+
using IntegrationEngine.Core.Configuration;
3+
4+
namespace IntegrationEngine.Core.IntegrationPoint
5+
{
6+
public interface IIntegrationPoint<TConfiguration> : IIntegrationPoint
7+
where TConfiguration : IIntegrationPointConfiguration
8+
{
9+
}
10+
}

IntegrationEngine.Core/Mail/IMailClient.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
using IntegrationEngine.Core.Configuration;
2+
using IntegrationEngine.Core.IntegrationPoint;
23
using System.Net.Mail;
34

45
namespace IntegrationEngine.Core.Mail
56
{
6-
public interface IMailClient
7+
public interface IMailClient : IIntegrationPoint<IMailConfiguration>
78
{
89
ISmtpClient SmtpClient { get; set; }
910
void Send(MailMessage mailMessage);
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using IntegrationEngine.Core.Configuration;
2+
using IntegrationEngine.Core.IntegrationPoint;
33

44
namespace IntegrationEngine.Core.MessageQueue
55
{
6-
public interface IRabbitMQClient : IMessageQueueClient
6+
public interface IRabbitMQClient : IMessageQueueClient, IIntegrationPoint<IMailConfiguration>
77
{}
88
}

IntegrationEngine/EngineHostCompositionRoot.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using Common.Logging.NLog;
44
using IntegrationEngine.Api;
55
using IntegrationEngine.Core.Configuration;
6+
using IntegrationEngine.Core.Elasticsearch;
7+
using IntegrationEngine.Core.IntegrationPoint;
68
using IntegrationEngine.Core.Jobs;
79
using IntegrationEngine.Core.Mail;
810
using IntegrationEngine.Core.MessageQueue;
@@ -110,7 +112,7 @@ public void RegisterIntegrationPoints()
110112
config.IntegrationPointName
111113
)
112114
);
113-
Container.RegisterType<IElasticClient, ElasticClient>(config.IntegrationPointName,
115+
Container.RegisterType<IElasticClient, ElasticClientAdapter>(config.IntegrationPointName,
114116
new InjectionFactory(elasticClientFactory));
115117
}
116118
foreach (var config in EngineConfiguration.IntegrationPoints.RabbitMQ) {
@@ -138,12 +140,12 @@ public void RegisterIntegrationJobs()
138140
{
139141
var parameterType = parameterInfo.ParameterType; // The type of integration point (e.g. IElasticClient)
140142
var parameterName = parameterInfo.ParameterType.Name; // The name of the configuration endpoint (e.g. "MyElasticClient")
141-
if (typeof(IMailClient).IsAssignableFrom(parameterType))
142-
resolvedParameters.Add(Activator.CreateInstance(parameterType, Container.Resolve<IMailConfiguration>(parameterName)));
143-
if (typeof(IRabbitMQClient).IsAssignableFrom(parameterType))
144-
resolvedParameters.Add(Activator.CreateInstance(parameterType, Container.Resolve<IRabbitMQConfiguration>(parameterName)));
145-
if (typeof(IElasticClient).IsAssignableFrom(parameterType))
146-
resolvedParameters.Add(Activator.CreateInstance(parameterType, Container.Resolve<IElasticsearchConfiguration>(parameterName)));
143+
// If the parameter implements IIntegrationPoint, resolve it's configuration type from the container.
144+
if (typeof(IIntegrationPoint).IsAssignableFrom(parameterType))
145+
{
146+
var configType = parameterType.GetInterface(typeof(IIntegrationPoint<IIntegrationPointConfiguration>).Name).GetGenericArguments().Single(); ;
147+
resolvedParameters.Add(Activator.CreateInstance(parameterType, Container.Resolve(configType, parameterName)));
148+
}
147149
}
148150
return resolvedParameters.Cast<object>().ToArray();
149151
};

0 commit comments

Comments
 (0)