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 }); }
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); }