Skip to content

Commit 1642243

Browse files
committed
Use container services to configure middlewares
1 parent 58c2d41 commit 1642243

File tree

6 files changed

+39
-118
lines changed

6 files changed

+39
-118
lines changed

Source/Orleankka.Runtime/Cluster/ClusterActorSystem.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Reflection;
5+
using Microsoft.Extensions.DependencyInjection;
56

67
namespace Orleankka.Cluster
78
{
@@ -14,14 +15,10 @@ class ClusterActorSystem : ActorSystem
1415

1516
readonly IActorMiddleware actorMiddleware;
1617

17-
internal ClusterActorSystem(
18-
Assembly[] assemblies,
19-
IServiceProvider serviceProvider,
20-
IActorRefMiddleware actorRefMiddleware = null,
21-
IActorMiddleware actorMiddleware = null)
22-
: base(assemblies, serviceProvider, actorRefMiddleware)
18+
internal ClusterActorSystem(Assembly[] assemblies, IServiceProvider serviceProvider)
19+
: base(assemblies, serviceProvider)
2320
{
24-
this.actorMiddleware = actorMiddleware ?? DefaultActorMiddleware.Instance;
21+
this.actorMiddleware = serviceProvider.GetService<IActorMiddleware>() ?? DefaultActorMiddleware.Instance;
2522
Register(assemblies);
2623
}
2724

Source/Orleankka.Runtime/Cluster/ClusterOptions.cs

Lines changed: 16 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,56 +6,40 @@
66
using Microsoft.Extensions.DependencyInjection;
77
using Microsoft.Extensions.DependencyInjection.Extensions;
88
using Microsoft.Extensions.Options;
9+
910
using Orleans;
1011
using Orleans.ApplicationParts;
1112
using Orleans.CodeGeneration;
12-
using Orleans.Configuration.Overrides;
1313
using Orleans.Hosting;
1414
using Orleans.Runtime;
1515

1616
namespace Orleankka.Cluster
1717
{
1818
using Client;
19-
using Utility;
2019

21-
public sealed class OrleankkaClusterOptions
20+
public static class SiloHostBuilderExtension
2221
{
23-
IActorRefMiddleware actorRefMiddleware;
24-
IActorMiddleware actorMiddleware;
25-
26-
/// <summary>
27-
/// Registers global actor middleware (interceptor).
28-
/// </summary>
29-
/// <param name="middleware">The middleware.</param>
30-
public OrleankkaClusterOptions ActorMiddleware(IActorMiddleware middleware)
31-
{
32-
actorMiddleware = middleware;
33-
return this;
34-
}
35-
36-
/// <summary>
37-
/// Registers global cluster-wide <see cref="ActorRef"/> middleware (interceptor)
38-
/// </summary>
39-
/// <param name="middleware">The middleware.</param>
40-
public OrleankkaClusterOptions ActorRefMiddleware(IActorRefMiddleware middleware)
41-
{
42-
Requires.NotNull(middleware, nameof(middleware));
22+
public static ISiloHostBuilder UseOrleankka(this ISiloHostBuilder builder) =>
23+
builder.ConfigureServices(services => UseOrleankka(builder.GetApplicationPartManager(), services));
4324

44-
if (actorRefMiddleware != null)
45-
throw new InvalidOperationException("ActorRef middleware for cluster has been already registered");
25+
public static ISiloBuilder UseOrleankka(this ISiloBuilder builder) =>
26+
builder.ConfigureServices(services => UseOrleankka(builder.GetApplicationPartManager(), services));
4627

47-
actorRefMiddleware = middleware;
48-
return this;
28+
static void UseOrleankka(IApplicationPartManager apm, IServiceCollection services)
29+
{
30+
Configure(apm, services);
31+
apm.AddApplicationPart(typeof(IClientEndpoint).Assembly)
32+
.WithCodeGeneration();
4933
}
50-
51-
internal void Configure(IApplicationPartManager apm, IServiceCollection services)
34+
35+
static void Configure(IApplicationPartManager apm, IServiceCollection services)
5236
{
5337
var assemblies = apm.ApplicationParts
5438
.OfType<AssemblyPart>().Select(x => x.Assembly)
5539
.ToArray();
5640

57-
services.AddSingleton(sp => new ClusterActorSystem(assemblies, sp, actorRefMiddleware, actorMiddleware));
58-
services.AddSingleton(sp => new ClientActorSystem(assemblies, sp, actorRefMiddleware));
41+
services.AddSingleton(sp => new ClusterActorSystem(assemblies, sp));
42+
services.AddSingleton(sp => new ClientActorSystem(assemblies, sp));
5943

6044
services.AddSingleton<IActorSystem>(sp => sp.GetService<ClusterActorSystem>());
6145
services.AddSingleton<IClientActorSystem>(sp => sp.GetService<ClientActorSystem>());
@@ -70,7 +54,7 @@ internal void Configure(IApplicationPartManager apm, IServiceCollection services
7054
services.AddOptions<DispatcherOptions>();
7155
}
7256

73-
DispatcherRegistry BuildDispatcherRegistry(IServiceProvider services, IEnumerable<Assembly> assemblies)
57+
static DispatcherRegistry BuildDispatcherRegistry(IServiceProvider services, IEnumerable<Assembly> assemblies)
7458
{
7559
var dispatchActors = assemblies.SelectMany(x => x.GetTypes())
7660
.Where(x => typeof(DispatchActorGrain).IsAssignableFrom(x) && !x.IsAbstract);
@@ -83,33 +67,6 @@ DispatcherRegistry BuildDispatcherRegistry(IServiceProvider services, IEnumerabl
8367

8468
return dispatcherRegistry;
8569
}
86-
}
87-
88-
public static class SiloHostBuilderExtension
89-
{
90-
public static ISiloHostBuilder UseOrleankka(this ISiloHostBuilder builder) =>
91-
UseOrleankka(builder, new OrleankkaClusterOptions());
92-
93-
public static ISiloHostBuilder UseOrleankka(this ISiloHostBuilder builder, Func<OrleankkaClusterOptions, OrleankkaClusterOptions> configure) =>
94-
UseOrleankka(builder, configure(new OrleankkaClusterOptions()));
95-
96-
public static ISiloHostBuilder UseOrleankka(this ISiloHostBuilder builder, OrleankkaClusterOptions cfg) =>
97-
builder.ConfigureServices(services => UseOrleankka(builder.GetApplicationPartManager(), services, cfg));
98-
99-
public static ISiloBuilder UseOrleankka(this ISiloBuilder builder) =>
100-
UseOrleankka(builder, new OrleankkaClusterOptions());
101-
102-
public static ISiloBuilder UseOrleankka(this ISiloBuilder builder, Func<OrleankkaClusterOptions, OrleankkaClusterOptions> configure) =>
103-
UseOrleankka(builder, configure(new OrleankkaClusterOptions()));
104-
105-
public static ISiloBuilder UseOrleankka(this ISiloBuilder builder, OrleankkaClusterOptions cfg) =>
106-
builder.ConfigureServices(services => UseOrleankka(builder.GetApplicationPartManager(), services, cfg));
107-
108-
static void UseOrleankka(IApplicationPartManager apm, IServiceCollection services, OrleankkaClusterOptions cfg)
109-
{
110-
cfg.Configure(apm, services);
111-
apm.AddApplicationPart(typeof(IClientEndpoint).Assembly).WithCodeGeneration();
112-
}
11370

11471
public static IClientActorSystem ActorSystem(this ISiloHost host) => host.Services.GetRequiredService<IClientActorSystem>();
11572
}

Source/Orleankka/ActorSystem.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,11 @@ public abstract class ActorSystem : IActorSystem
5252
readonly IGrainFactory grainFactory;
5353
readonly IActorRefMiddleware actorRefMiddleware;
5454

55-
protected ActorSystem(
56-
Assembly[] assemblies,
57-
IServiceProvider serviceProvider,
58-
IActorRefMiddleware actorRefMiddleware = null)
55+
protected ActorSystem(Assembly[] assemblies, IServiceProvider serviceProvider)
5956
{
6057
this.serviceProvider = serviceProvider;
6158
this.grainFactory = serviceProvider.GetService<IGrainFactory>();
62-
this.actorRefMiddleware = actorRefMiddleware ?? DefaultActorRefMiddleware.Instance;
59+
this.actorRefMiddleware = serviceProvider.GetService<IActorRefMiddleware>() ?? DefaultActorRefMiddleware.Instance;
6360

6461
Register(assemblies);
6562
}

Source/Orleankka/Client/ClientActorSystem.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,8 @@ public sealed class ClientActorSystem : ActorSystem, IClientActorSystem
2727
{
2828
readonly IGrainFactory grainFactory;
2929

30-
internal ClientActorSystem(
31-
Assembly[] assemblies,
32-
IServiceProvider serviceProvider,
33-
IActorRefMiddleware actorRefMiddleware = null)
34-
: base(assemblies, serviceProvider, actorRefMiddleware)
30+
internal ClientActorSystem(Assembly[] assemblies, IServiceProvider serviceProvider)
31+
: base(assemblies, serviceProvider)
3532
{
3633
grainFactory = serviceProvider.GetService<IGrainFactory>();
3734
}

Source/Orleankka/Client/ClientOptions.cs

Lines changed: 11 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,54 +9,26 @@
99

1010
namespace Orleankka.Client
1111
{
12-
using Utility;
13-
14-
public sealed class OrleankkaClientOptions
12+
public static class ClientBuilderExtension
1513
{
16-
IActorRefMiddleware middleware;
17-
18-
/// <summary>
19-
/// Registers global <see cref="ActorRef"/> middleware (interceptor)
20-
/// </summary>
21-
/// <param name="middleware">The middleware.</param>
22-
public OrleankkaClientOptions ActorRefMiddleware(IActorRefMiddleware middleware)
23-
{
24-
Requires.NotNull(middleware, nameof(middleware));
25-
26-
if (this.middleware != null)
27-
throw new InvalidOperationException("ActorRef middleware has been already registered");
28-
29-
this.middleware = middleware;
30-
return this;
31-
}
14+
public static IClientBuilder UseOrleankka(this IClientBuilder builder) =>
15+
builder
16+
.ConfigureServices(services => Configure(builder, services))
17+
.ConfigureApplicationParts(apm => apm
18+
.AddApplicationPart(typeof(IClientEndpoint).Assembly)
19+
.WithCodeGeneration());
3220

33-
internal void Configure(IClientBuilder builder, IServiceCollection services)
21+
static void Configure(IClientBuilder builder, IServiceCollection services)
3422
{
3523
var assemblies = builder.GetApplicationPartManager().ApplicationParts
36-
.OfType<AssemblyPart>().Select(x => x.Assembly)
37-
.ToArray();
24+
.OfType<AssemblyPart>().Select(x => x.Assembly)
25+
.ToArray();
3826

3927
services.AddSingleton<IActorSystem>(sp => sp.GetService<ClientActorSystem>());
4028
services.AddSingleton<IClientActorSystem>(sp => sp.GetService<ClientActorSystem>());
4129

42-
services.AddSingleton(sp => new ClientActorSystem(assemblies, sp, middleware));
30+
services.AddSingleton(sp => new ClientActorSystem(assemblies, sp));
4331
}
44-
}
45-
46-
public static class ClientBuilderExtension
47-
{
48-
public static IClientBuilder UseOrleankka(this IClientBuilder builder) =>
49-
UseOrleankka(builder, new OrleankkaClientOptions());
50-
51-
public static IClientBuilder UseOrleankka(this IClientBuilder builder, Func<OrleankkaClientOptions, OrleankkaClientOptions> configure) =>
52-
UseOrleankka(builder, configure(new OrleankkaClientOptions()));
53-
54-
public static IClientBuilder UseOrleankka(this IClientBuilder builder, OrleankkaClientOptions cfg) =>
55-
builder
56-
.ConfigureServices(services => cfg.Configure(builder, services))
57-
.ConfigureApplicationParts(apm => apm
58-
.AddApplicationPart(typeof(IClientEndpoint).Assembly)
59-
.WithCodeGeneration());
6032

6133
public static IClientActorSystem ActorSystem(this IClusterClient client) => client.ServiceProvider.GetRequiredService<IClientActorSystem>();
6234
}

Tests/Orleankka.Tests/Testing/TestActions.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,15 @@ public override void BeforeTest(ITest test)
8383
var customConventions = Dispatcher.DefaultHandlerNamingConventions.Concat(new[]{"OnFoo"});
8484
o.HandlerNamingConventions = customConventions.ToArray();
8585
});
86+
87+
services.AddSingleton<IActorRefMiddleware>(s => new TestActorRefMiddleware());
88+
services.AddSingleton<IActorMiddleware>(s => new TestActorMiddleware());
8689
})
8790
.ConfigureApplicationParts(x => x
8891
.AddApplicationPart(GetType().Assembly)
8992
.AddApplicationPart(typeof(MemoryGrainStorage).Assembly)
9093
.WithCodeGeneration())
91-
.UseOrleankka(x => x
92-
.ActorMiddleware(new TestActorMiddleware())
93-
.ActorRefMiddleware(new TestActorRefMiddleware()))
94+
.UseOrleankka()
9495
.UseOrleankkaLegacyFeatures(x => x
9596
.AddSimpleMessageStreamProvider("sms")
9697
.RegisterPersistentStreamProviders("aqp"));

0 commit comments

Comments
 (0)