Esempio n. 1
0
 private void OnServiceDiscovered(object sender, ResonanceDiscoveredServiceEventArgs <ResonanceSignalRDiscoveredService <DemoServiceInformation>, DemoServiceInformation> e)
 {
     InvokeUI(() =>
     {
         RegisteredServices.Add(e.DiscoveredService.DiscoveryInfo);
     });
 }
Esempio n. 2
0
 public static void Register <T>(string serviceName, T obj)
 {
     if (!RegisteredServices.TryAdd(serviceName, obj))
     {
         throw new Exception($"Service {serviceName} has already been registered.");
     }
 }
Esempio n. 3
0
        private async void ResetDiscovery()
        {
            await _discoveryClient.StopAsync();

            RegisteredServices.Clear();
            _discoveryClient.HubUrl      = HubUrl;
            _discoveryClient.Credentials = new DemoCredentials()
            {
                Name = ClientID
            };

            try
            {
                IsFree = false;
                await _discoveryClient.StartAsync();
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error starting discovery service. Make sure the remote SignalR Hub is running.");
            }
            finally
            {
                IsFree = true;
            }
        }
Esempio n. 4
0
 public static void Register <T>(string serviceName, T obj)
 {
     if (RegisteredServices.ContainsKey(serviceName))
     {
         throw new Exception($"Service {serviceName} has already been registered.");
     }
     RegisteredServices.Add(serviceName, obj);
 }
Esempio n. 5
0
File: Blip.cs Progetto: markvx/Blip
        /// <summary>
        /// Handle incoming data from the websocket.
        /// </summary>
        /// <remarks>Check it is valid, handle if RPC.</remarks>
        /// <param name="client">The client connection.</param>
        /// <param name="jsonMessage">The message payload as JSON.</param>
        private void HandleMessage(IWebSocketConnection client, String jsonMessage)
        {
            // Convert to BlipRequest.
            BlipRequest request = null;

            try
            {
                request = JsonConvert.DeserializeObject <BlipRequest>(jsonMessage);
                request.Validate();
            }
            catch (Exception e)
            {
                if (LogWarning != null)
                {
                    LogWarning(this, "Dropped bad Blip request from " + client.ConnectionInfo.ClientIpAddress);
                }
                return;
            }

            // Locate target delegate.
            Delegate target;

            if (!RegisteredServices.TryGetValue(request.Target, out target))
            {
                if (LogWarning != null)
                {
                    LogWarning(this, "Missing RPC registered handler for target from " + client.ConnectionInfo.ClientIpAddress);
                }
                return;
            }

            // Dynamic invoke.
            String responseJson = null;

            try
            {
                var result = target.DynamicInvoke(request.Arguments);
                responseJson = JsonConvert.SerializeObject(new BlipResponse()
                {
                    Target = request.Call, Success = true, Result = result
                });
            }
            catch (Exception e)
            {
                var err = e.InnerException;
                if (err != null)
                {
                    e = err;
                }
                responseJson = JsonConvert.SerializeObject(new BlipResponse()
                {
                    Target = request.Call, Success = false, Result = new { Message = e.Message, Stacktrace = e.StackTrace }
                });
            }

            // Pass it back.
            DispatchData(client, responseJson);
        }
        /// <summary>
        /// 使用契约接口注册Http请求服务
        /// </summary>
        /// <typeparam name="TService">契约接口类型</typeparam>
        /// <param name="baseUrl">服务器地址,不填时需要在契约接口标记HttpHost特性</param>
        public void AddService <TService>(string baseUrl = null)
        {
            if (!typeof(TService).IsInterface)
            {
                throw new ArgumentOutOfRangeException($"{typeof(TService).Name} is not a interface.");
            }

            RegisteredServices.Add(new KeyValuePair <string, Type>(baseUrl, typeof(TService)));
        }
Esempio n. 7
0
        public static void Register(Type type, object obj)
        {
            var serviceName = GetServiceRegistrationName(type);

            if (!RegisteredServices.TryAdd(serviceName, obj))
            {
                throw new Exception($"Service {serviceName} has already been registered.");
            }
        }
Esempio n. 8
0
        public static object Resolve(Type type)
        {
            var serviceName = GetServiceRegistrationName(type);

            if (RegisteredServices.TryGetValue(serviceName, out var service))
            {
                return(service);
            }
            throw new Exception($"Service {serviceName} is not registered.");
        }
Esempio n. 9
0
 public static T Resolve <T>(string serviceName, bool dontThrow = false)
 {
     if (RegisteredServices.ContainsKey(serviceName))
     {
         return((T)RegisteredServices[serviceName]);
     }
     if (dontThrow)
     {
         return((T)(object)null);
     }
     throw new Exception($"Service {serviceName} is not registered.");
 }
Esempio n. 10
0
 public static T Resolve <T>(string serviceName, bool dontThrow = false)
 {
     if (RegisteredServices.TryGetValue(serviceName, out var service))
     {
         return((T)service);
     }
     if (dontThrow)
     {
         return((T)(object)null);
     }
     throw new Exception($"Service {serviceName} is not registered.");
 }
Esempio n. 11
0
 public static void Reset()
 {
     foreach (var service in RegisteredServices)
     {
         if (service.Value != null && service.Value is IDisposable disposableService)
         {
             disposableService.Dispose();
         }
     }
     Inited = false;
     RegisteredServices.Clear();
     RegisteredServices = new Dictionary <string, object>();
 }
        public void IfServiceDescriptorWithImplementationInstanceIsProvided_ThenNullIsReturned()
        {
            // Arrange
            var registeredServices  = new RegisteredServices <string, IFoo>();
            var singletonDescriptor = ServiceDescriptor.Singleton <IFoo>(new Foo());
            var key = "key";

            // Act
            Func <ServiceDescriptor> act = () => registeredServices.TryAddService(key, singletonDescriptor);

            // Asset
            var result = act.Should().NotThrow().Subject;

            result.Should().BeNull();
        }
Esempio n. 13
0
        private void ClearConnection()
        {
            IsConnected = false;

            InvokeUI(async() =>
            {
                RegisteredServices.Clear();

                _discoveryClient.Credentials = new DemoCredentials()
                {
                    Name = ClientID
                };
                _discoveryClient.HubUrl = HubUrl;
                await _discoveryClient.StartAsync();
            });
        }
Esempio n. 14
0
        public object ResolveService(Type type)
        {
            if (instances.TryGetValue(type, out object value))
            {
                return(value);
            }

            if (RegisteredServices.TryGetValue(type, out Type implementation))
            {
                ConstructorInfo[] infoCollection = GatherConstructors(implementation);
                return(ConstructService(implementation, infoCollection));
            }


            throw new ArgumentException(
                      $"No services are registered that implement the given type: {type.ToString()}");
        }
        public void IfTheSameKeyIsAddedMultipleTimes_ThenOnlyFirstCallReturnsAdjustedServiceDescriptorAndSubsequentCallsRetunNull()
        {
            // Arrange
            var registeredServices  = new RegisteredServices <string, IFoo>();
            var transientDescriptor = ServiceDescriptor.Transient <IFoo, Foo>();
            var key = "key";

            // Act
            Func <(ServiceDescriptor, ServiceDescriptor, ServiceDescriptor)> act = () =>
                                                                                   (
                registeredServices.TryAddService(key, transientDescriptor),
                registeredServices.TryAddService(key, transientDescriptor),
                registeredServices.TryAddService(key, transientDescriptor)
                                                                                   );

            // Asset
            using (new AssertionScope())
            {
                var(result1, result2, result3) = act.Should().NotThrow().Subject;
                result1.Should().BeEquivalentTo(ServiceDescriptor.Transient <Foo, Foo>());
                result2.Should().BeNull();
                result3.Should().BeNull();
            }
        }
Esempio n. 16
0
        public static bool TryResolve(Type type, out object service)
        {
            var serviceName = GetServiceRegistrationName(type);

            return(RegisteredServices.TryGetValue(serviceName, out service));
        }
Esempio n. 17
0
 public static void Reset()
 {
     Inited = false;
     RegisteredServices.Clear();
     RegisteredServices = new Dictionary <string, object>();
 }