/// <summary> /// Creates an <see cref="ActorProxy"/> /// </summary> /// <typeparam name="TActorInterface">The type of the actor to create</typeparam> /// <param name="actorId">The id of the actor to address</param> /// <param name="customHeaderProvider">A factory to create a <see cref="CustomHeaders"/> instance with data passed to the actor</param> /// <param name="applicationName"></param> /// <param name="serviceName"></param> /// <param name="listenerName"></param> /// <returns>An actor proxy object that implements IActorProxy and TActorInterface.</returns> public static TActorInterface Create <TActorInterface>(ActorId actorId, Func <CustomHeaders> customHeaderProvider, string applicationName = null, string serviceName = null, string listenerName = null) where TActorInterface : IActor { var methodNameProvider = new MethodNameProvider(); var proxyFactory = new ActorProxyFactory(handler => new ExtendedServiceRemotingClientFactory( new FabricTransportActorRemotingClientFactory(handler), customHeaderProvider, methodNameProvider)); var proxy = proxyFactory.CreateActorProxy <TActorInterface>(actorId, applicationName, serviceName, listenerName); methodNameProvider.AddMethodsForProxyOrService(proxy.GetType().GetInterfaces(), typeof(IActor)); return(proxy); }
/// <summary> /// Creates an <see cref="ServiceProxy"/> /// </summary> /// <typeparam name="TServiceInterface">The type of service to create</typeparam> /// <param name="serviceUri">The uri of the service</param> /// <param name="customHeaderProvider">A factory to create a <see cref="CustomHeaders"/> instance with data passed to the service</param> /// <param name="partitionKey"></param> /// <param name="targetReplicaSelector"></param> /// <param name="listenerName"></param> /// <returns>A service proxy object that implements IServiceProxy and TServiceInterface.</returns> public static TServiceInterface Create <TServiceInterface>(Uri serviceUri, Func <CustomHeaders> customHeaderProvider, ServicePartitionKey partitionKey = null, TargetReplicaSelector targetReplicaSelector = TargetReplicaSelector.Default, string listenerName = null) where TServiceInterface : IService { var methodNameProvider = new MethodNameProvider(); var proxyFactory = new ServiceProxyFactory(handler => new ExtendedServiceRemotingClientFactory( new FabricTransportServiceRemotingClientFactory(remotingCallbackMessageHandler: handler), customHeaderProvider, methodNameProvider)); var proxy = proxyFactory.CreateServiceProxy <TServiceInterface>(serviceUri, partitionKey, targetReplicaSelector, listenerName); methodNameProvider.AddMethodsForProxyOrService(proxy.GetType().GetInterfaces(), typeof(IService)); return(proxy); }
public object Provide(object context) { InvokeMethod invoke = InvokeMethodInstance == null ? new InvokeMethod() : InvokeMethodInstance; if (TargetProvider != null) { invoke.TargetObject = TargetProvider.Provide(context); } if (MethodNameProvider != null) { invoke.MethodName = MethodNameProvider.Provide(context); } if (ArgumentProviders != null) { object[] args = new object[ArgumentProviders.Length]; for (int i = 0; i < ArgumentProviders.Length; i++) { args[i] = ArgumentProviders[i].Provide(context); } invoke.Arguments = args; } return(invoke.Provide(context)); }