Skip to content

Commit 798a7b4

Browse files
authored
Merge pull request #5 from GodelTech/feature/improve-extension
update extension to use IConfiguration
2 parents 7d85b33 + 893a46e commit 798a7b4

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

src/GodelTech.Messaging.AzureServiceBus/DependencyInjection/ServiceCollectionExtensions.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Azure.Messaging.ServiceBus;
33
using GodelTech.Messaging.AzureServiceBus;
4+
using Microsoft.Extensions.Configuration;
45
using Microsoft.Extensions.DependencyInjection;
56

67
namespace Microsoft.AspNetCore.Builder
@@ -15,18 +16,25 @@ public static class ServiceCollectionExtensions
1516
/// </summary>
1617
/// <param name="services">Service collection.</param>
1718
/// <param name="connectionString">Connection string to Azure Service Bus.</param>
18-
/// <param name="optionsAction">Azure Service Bus options action.</param>
19+
/// <param name="configureOptions">Azure Service Bus options.</param>
1920
/// <returns></returns>
2021
public static IServiceCollection AddAzureServiceBusSender(
2122
this IServiceCollection services,
22-
string connectionString,
23-
Action<AzureServiceBusOptions> optionsAction)
23+
Func<IConfiguration, string> connectionString,
24+
Action<AzureServiceBusOptions, IConfiguration> configureOptions)
2425
{
2526
// ServiceBusClient
26-
services.AddTransient(provider => new ServiceBusClient(connectionString));
27+
services.AddTransient(
28+
provider => new ServiceBusClient(
29+
connectionString(
30+
provider.GetService<IConfiguration>()
31+
)
32+
)
33+
);
2734

2835
// Options
29-
services.Configure(optionsAction);
36+
services.AddOptions<AzureServiceBusOptions>()
37+
.Configure(configureOptions);
3038

3139
// AzureServiceBusSender
3240
services.AddTransient<IAzureServiceBusSender, AzureServiceBusSender>();

src/GodelTech.Messaging.AzureServiceBus/GodelTech.Messaging.AzureServiceBus.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
<ItemGroup>
3131
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.1.1" />
32+
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.0" />
3233
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
3334
<PackageReference Include="Microsoft.Extensions.Options" Version="3.1.0" />
3435

test/GodelTech.Messaging.AzureServiceBus.Tests/DependencyInjection/ServiceCollectionExtensionsTests.cs

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq.Expressions;
34
using Azure.Messaging.ServiceBus;
45
using Microsoft.AspNetCore.Builder;
6+
using Microsoft.Extensions.Configuration;
57
using Microsoft.Extensions.DependencyInjection;
68
using Microsoft.Extensions.Options;
79
using Xunit;
@@ -14,23 +16,31 @@ public class ServiceCollectionExtensionsTests
1416
public void AddAzureServiceBusSender_Success()
1517
{
1618
// Arrange
17-
const string connectionString = "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=YourAccessKey";
18-
var queues = new Dictionary<string, string>
19-
{
20-
{
21-
"InternalKey",
22-
"AzureServiceBusQueueName"
23-
}
24-
};
25-
Action<AzureServiceBusOptions> optionsAction = options =>
26-
{
27-
options.Queues = queues;
28-
};
19+
Expression<Func<IConfiguration, string>> connectionStringExpression = configuration => configuration
20+
.GetValue<string>("AzureServiceBusOptions:ConnectionString");
21+
22+
Action<AzureServiceBusOptions, IConfiguration> configureOptions = (options, configuration) => configuration
23+
.GetSection("AzureServiceBusOptions")
24+
.Bind(options);
2925

3026
var services = new ServiceCollection();
3127

28+
services
29+
.AddTransient<IConfiguration>(
30+
_ => new ConfigurationBuilder()
31+
.AddInMemoryCollection(
32+
new Dictionary<string, string>
33+
{
34+
["AzureServiceBusOptions:ConnectionString"] = "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=YourAccessKey",
35+
["AzureServiceBusOptions:Queues:FirstInternalKey"] = "FirstAzureServiceBusQueueName",
36+
["AzureServiceBusOptions:Queues:SecondInternalKey"] = "SecondAzureServiceBusQueueName"
37+
}
38+
)
39+
.Build()
40+
);
41+
3242
// Act
33-
services.AddAzureServiceBusSender(connectionString, optionsAction);
43+
services.AddAzureServiceBusSender(connectionStringExpression.Compile(), configureOptions);
3444

3545
// Assert
3646
var provider = services.BuildServiceProvider();
@@ -41,7 +51,8 @@ public void AddAzureServiceBusSender_Success()
4151
var resultOptionsAction = provider.GetRequiredService<IOptions<AzureServiceBusOptions>>();
4252
Assert.NotNull(resultOptionsAction);
4353
Assert.NotNull(resultOptionsAction.Value);
44-
Assert.Equal(queues, resultOptionsAction.Value.Queues);
54+
Assert.Equal("FirstAzureServiceBusQueueName", resultOptionsAction.Value.Queues["FirstInternalKey"]);
55+
Assert.Equal("SecondAzureServiceBusQueueName", resultOptionsAction.Value.Queues["SecondInternalKey"]);
4556

4657
var resultAzureServiceBusSender = provider.GetRequiredService<IAzureServiceBusSender>();
4758
Assert.NotNull(resultAzureServiceBusSender);

test/GodelTech.Messaging.AzureServiceBus.Tests/GodelTech.Messaging.AzureServiceBus.Tests.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp3.1</TargetFramework>
@@ -9,7 +9,8 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
12+
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.0" />
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
1314
<PackageReference Include="Moq" Version="4.16.1" />
1415
<PackageReference Include="xunit" Version="2.4.1" />
1516
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">

0 commit comments

Comments
 (0)