private IEmitGenerator CreateGenerator(ServiceModelGrpcClientOptions clientOptions) { var generator = _generator ?? new EmitGenerator(); generator.Logger = clientOptions.Logger; return(generator); }
private object RegisterClient <TContract>(IClientBuilder <TContract>?userBuilder, Action <ServiceModelGrpcClientOptions>?configure) where TContract : class { var contractType = typeof(TContract); if (userBuilder == null && (!ReflectionTools.IsPublicInterface(contractType) || contractType.IsGenericTypeDefinition)) { throw new NotSupportedException("{0} is not supported. Client contract must be public interface.".FormatWith(contractType)); } var options = new ServiceModelGrpcClientOptions { MarshallerFactory = _defaultOptions?.MarshallerFactory, DefaultCallOptionsFactory = _defaultOptions?.DefaultCallOptionsFactory, Logger = _defaultOptions?.Logger, ErrorHandler = _defaultOptions?.ErrorHandler }; configure?.Invoke(options); var generator = userBuilder == null?CreateGenerator(options) : null; IClientBuilder <TContract> builder; lock (_syncRoot) { if (_builderByContract.ContainsKey(contractType)) { throw new InvalidOperationException("Client for contract {0} is already initialized and cannot be changed.".FormatWith(contractType.FullName)); } builder = userBuilder ?? generator !.GenerateClientBuilder <TContract>(); builder.Initialize(options.MarshallerFactory ?? DataContractMarshallerFactory.Default, options.DefaultCallOptionsFactory); _builderByContract.Add(contractType, builder); if (options.ErrorHandler != null) { _interceptorByContract.Add(contractType, new ClientNativeInterceptor(new ClientCallErrorInterceptor( options.ErrorHandler, options.MarshallerFactory.ThisOrDefault(), options.Logger))); } } return(builder); }
public void BeforeEachTest() { _emitClientBuilder = new Mock <IClientBuilder <IDisposable> >(MockBehavior.Strict); _defaultOptions = new ServiceModelGrpcClientOptions(); _callInvoker = new Mock <CallInvoker>(MockBehavior.Strict); _globalErrorHandler = new Mock <IClientErrorHandler>(MockBehavior.Strict).Object; _localErrorHandler = new Mock <IClientErrorHandler>(MockBehavior.Strict).Object; _generator = new Mock <IEmitGenerator>(MockBehavior.Strict); _generator.SetupProperty(g => g.Logger, null); _generator .Setup(g => g.GenerateClientBuilder <IDisposable>()) .Returns(_emitClientBuilder.Object); _sut = new ClientFactory(_generator.Object, _defaultOptions); }