@@ -628,28 +628,6 @@ public static AkkaConfigurationBuilder WithClustering(
628
628
return hoconBuilder . WithActorRefProvider ( ProviderSelection . Cluster . Instance ) ;
629
629
}
630
630
631
- private static ExtractEntityId ToExtractEntityId ( this IMessageExtractor self )
632
- {
633
- Option < ( string , object ) > ExtractEntityId ( object msg )
634
- {
635
- if ( self . EntityId ( msg ) != null ) return ( self . EntityId ( msg ) , self . EntityMessage ( msg ) ) ;
636
-
637
- return Option < ( string , object ) > . None ;
638
- }
639
-
640
- return ExtractEntityId ;
641
- }
642
-
643
- private static ExtractShardId ToExtractShardId ( this IMessageExtractor self )
644
- {
645
- string ? ExtractShardId ( object msg )
646
- {
647
- return self . EntityId ( msg ) != null ? self . ShardId ( msg ) : null ;
648
- }
649
-
650
- return ExtractShardId ;
651
- }
652
-
653
631
public static AkkaConfigurationBuilder WithDistributedData (
654
632
this AkkaConfigurationBuilder builder ,
655
633
Action < DDataOptions > configurator )
@@ -702,7 +680,7 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
702
680
ShardOptions shardOptions )
703
681
{
704
682
return builder . WithShardRegion < TKey > ( typeName , ( _ , _ , _ ) => entityPropsFactory ,
705
- messageExtractor . ToExtractEntityId ( ) , messageExtractor . ToExtractShardId ( ) , shardOptions ) ;
683
+ messageExtractor , shardOptions ) ;
706
684
}
707
685
708
686
/// <summary>
@@ -785,7 +763,7 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
785
763
{
786
764
return builder . WithShardRegion < TKey > ( typeName ,
787
765
( system , registry , _ ) => entityPropsFactory ( system , registry ) ,
788
- messageExtractor . ToExtractEntityId ( ) , messageExtractor . ToExtractShardId ( ) , shardOptions ) ;
766
+ messageExtractor , shardOptions ) ;
789
767
}
790
768
791
769
/// <summary>
@@ -869,8 +847,23 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
869
847
IMessageExtractor messageExtractor ,
870
848
ShardOptions shardOptions )
871
849
{
872
- return builder . WithShardRegion < TKey > ( typeName , entityPropsFactory ,
873
- messageExtractor . ToExtractEntityId ( ) , messageExtractor . ToExtractShardId ( ) , shardOptions ) ;
850
+ shardOptions . Apply ( builder ) ;
851
+ builder . AddHocon (
852
+ ClusterSharding . DefaultConfig ( ) . WithFallback ( DistributedData . DistributedData . DefaultConfig ( ) ) ,
853
+ HoconAddMode . Append ) ;
854
+
855
+ return builder . StartActors ( Resolver ) ;
856
+
857
+ async Task Resolver ( ActorSystem system , IActorRegistry registry , IDependencyResolver resolver )
858
+ {
859
+ var props = entityPropsFactory ( system , registry , resolver ) ;
860
+ var settings = ClusterShardingSettings . Create ( system ) ;
861
+ var allocationStrategy = ClusterSharding . Get ( system ) . DefaultShardAllocationStrategy ( settings ) ;
862
+ var shardRegion = await ClusterSharding . Get ( system ) . StartAsync (
863
+ typeName , props , settings , messageExtractor , allocationStrategy ,
864
+ shardOptions . HandOffStopMessage ?? PoisonPill . Instance ) . ConfigureAwait ( false ) ;
865
+ registry . Register < TKey > ( shardRegion ) ;
866
+ }
874
867
}
875
868
876
869
/// <summary>
0 commit comments