Ejemplo n.º 1
0
        private IEmitGenerator CreateGenerator(ServiceModelGrpcClientOptions clientOptions)
        {
            var generator = _generator ?? new EmitGenerator();

            generator.Logger = clientOptions.Logger;

            return(generator);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }