public static void Hook(string[] providers, Func<StreamIdentity, StreamPubSubMatch[]> matcher) { var runtimeType = typeof(SiloHost).Assembly.GetType("Orleans.Runtime.Providers.SiloProviderRuntime"); var runtime = runtimeType.GetProperty("Instance").GetValue(null); var grainBasedPubSubField = runtimeType .GetField("grainBasedPubSub", BindingFlags.Instance | BindingFlags.NonPublic); var combinedGrainBasedAndImplicitPubSub = runtimeType .GetField("combinedGrainBasedAndImplicitPubSub", BindingFlags.Instance | BindingFlags.NonPublic); Debug.Assert(grainBasedPubSubField != null); Debug.Assert(combinedGrainBasedAndImplicitPubSub != null); var streamPubSub = (IStreamPubSub) grainBasedPubSubField.GetValue(runtime); var wrapper = new StreamPubSubWrapper(providers, streamPubSub, matcher); combinedGrainBasedAndImplicitPubSub.SetValue(runtime, wrapper); }
public static void Hook(string[] providers, Func <StreamIdentity, StreamPubSubMatch[]> matcher) { var runtimeType = typeof(SiloHost).Assembly.GetType("Orleans.Runtime.Providers.SiloProviderRuntime"); var runtime = runtimeType.GetProperty("Instance").GetValue(null); var grainBasedPubSubField = runtimeType .GetField("grainBasedPubSub", BindingFlags.Instance | BindingFlags.NonPublic); var combinedGrainBasedAndImplicitPubSub = runtimeType .GetField("combinedGrainBasedAndImplicitPubSub", BindingFlags.Instance | BindingFlags.NonPublic); Debug.Assert(grainBasedPubSubField != null); Debug.Assert(combinedGrainBasedAndImplicitPubSub != null); var streamPubSub = (IStreamPubSub)grainBasedPubSubField.GetValue(runtime); var wrapper = new StreamPubSubWrapper(providers, streamPubSub, matcher); combinedGrainBasedAndImplicitPubSub.SetValue(runtime, wrapper); }