public RestServerServiceRouteHandler(IPEndPoint endPoint, IConverter converter, IRestServerServiceDependencyResolver restServerDependencyResolver, params Assembly[] assemblys) { _exposedRestServerServices = new List <ExposedRestServerService>(); _assemblys = assemblys; _restServerDependencyResolver = restServerDependencyResolver; _endPoint = endPoint; _converter = converter; RegisterExposedServices(); }
public RestServerService ActivateRestServerService(Type serviceType, IRestServerServiceDependencyResolver dependecyResolver) { var service = EasyActivation(serviceType, dependecyResolver) as RestServerService; if (service == null) { throw new InvalidOperationException($"Could not activate {serviceType.FullName}."); } return(service); }
public ApiServer(Configuration config, IConverter converter, ILogger logger, IRestServerServiceDependencyResolver resolver) { _config = config ?? throw new ArgumentNullException(nameof(config)); _converter = converter ?? throw new ArgumentNullException(nameof(converter)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _restServer = new RestServer.RestServer( endPoint: GetIPEndPoint(config.ApiServerPort), restServerDependencyResolver: resolver, converter: converter, assemblys: typeof(ApiServer).GetTypeInfo().Assembly); Log.i($"Starting: IP:{_restServer.IPEndPoint.Address.ToString()} Port:{_restServer.IPEndPoint.Port}"); _restServer.Start(); }
public RestServer(IPEndPoint endPoint, IRestServerServiceDependencyResolver restServerDependencyResolver, IConverter converter, params Assembly[] assemblys) { _endPoint = endPoint ?? throw new ArgumentNullException(nameof(endPoint)); if (assemblys == null || assemblys.Length == 0) { _restServerRouteHandlers = new ConcurrentBag <IRestServerRouteHandler>(); } else { _restServerRouteHandlers = new ConcurrentBag <IRestServerRouteHandler>( new IRestServerRouteHandler[] { new RestServerServiceRouteHandler(endPoint, converter, restServerDependencyResolver, assemblys), } ); } }
public object EasyActivation(Type type, IRestServerServiceDependencyResolver dependecyResolver) { var constuctors = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public); foreach (var constructor in constuctors.OrderByDescending(constructor => constructor.GetParameters().Length)) { var parameters = constructor.GetParameters(); if (parameters == null || parameters.Length == 0) { // default constructor return(constructor.Invoke(new object[0])); } if (dependecyResolver != null) { if (parameters.Any(param => param.ParameterType == type)) { throw new InvalidOperationException($"Recursion on dependecy detected, {type.FullName}."); } // resolve dependencys var dependencys = dependecyResolver.GetDependecys(parameters.Select(param => param.ParameterType).ToArray()); if (dependencys == null || parameters.Length != dependencys.Length) { // no dependecys found. continue; } return(constructor.Invoke(dependencys) ?? throw new InvalidOperationException($"Could not activate {type.FullName}")); } } throw new InvalidOperationException( $"{nameof(SimpleActivator)}: Could not find a matching constructor for " + $"{type.FullName}. Either provide a parameterless constructor or provide " + $"the correct dependencys via {nameof(IRestServerServiceDependencyResolver)}."); }
public ExposedRestServerService(IRestServerServiceDependencyResolver RestServerDependencyResolver) { _RestServerDependencyResolver = RestServerDependencyResolver; }