Exemple #1
0
        private static void ReflectionBind <TService>(ServiceBinderBase binder, TService service)
        {
            var bindMethodInfo = BindMethodFinder.GetBindMethod(typeof(TService));

            // Invoke BindService(ServiceBinderBase, BaseType)
            bindMethodInfo.Invoke(null, new object[] { binder, service });
        }
Exemple #2
0
        public void OnServiceMethodDiscovery(ServiceMethodProviderContext <TService> context)
        {
            var bindMethodInfo = BindMethodFinder.GetBindMethod(typeof(TService));

            // Invoke BindService(ServiceBinderBase, BaseType)
            if (bindMethodInfo != null)
            {
                // The second parameter is always the service base type
                var serviceParameter = bindMethodInfo.GetParameters()[1];

                ServiceDescriptor?serviceDescriptor = null;
                try
                {
                    serviceDescriptor = ServiceDescriptorHelpers.GetServiceDescriptor(bindMethodInfo.DeclaringType !);
                }
                catch (Exception ex)
                {
                    Log.ServiceDescriptorError(_logger, typeof(TService), ex);
                }

                if (serviceDescriptor != null)
                {
                    var binder = new HttpApiProviderServiceBinder <TService>(
                        context,
                        serviceParameter.ParameterType,
                        serviceDescriptor,
                        _globalOptions,
                        _serviceOptions,
                        _serviceProvider,
                        _loggerFactory,
                        _serviceActivator);

                    try
                    {
                        bindMethodInfo.Invoke(null, new object[] { binder, null });
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidOperationException($"Error binding gRPC service '{typeof(TService).Name}'.",
                                                            ex);
                    }
                }
            }
            else
            {
                Log.BindMethodNotFound(_logger, typeof(TService));
            }
        }
        public void GetBindMethodUsingAttribute(Type serviceType, bool foundMethod)
        {
            var methodInfo = BindMethodFinder.GetBindMethodUsingAttribute(serviceType);

            Assert.AreEqual(foundMethod, methodInfo != null);
        }
        public void GetBindMethodFallback(Type serviceType)
        {
            var methodInfo = BindMethodFinder.GetBindMethodFallback(serviceType);

            Assert.IsNotNull(methodInfo);
        }