Beispiel #1
0
        public RestServerServiceRouteHandler(IPEndPoint endPoint, IConverter converter, IRestServerServiceDependencyResolver restServerDependencyResolver, params Assembly[] assemblys)
        {
            _exposedRestServerServices = new List <ExposedRestServerService>();
            _assemblys = assemblys;
            _restServerDependencyResolver = restServerDependencyResolver;
            _endPoint  = endPoint;
            _converter = converter;

            RegisterExposedServices();
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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),
                }
                    );
            }
        }
Beispiel #5
0
        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;
 }