コード例 #1
0
 public void AddDependencyInjector(IDependencyInjectorMaker injectorMaker)
 {
     if (string.IsNullOrEmpty(injectorMaker.ControllerName))
     {
         throw new Exception("It is no longer possible to use empty strings or nulls for ControllerName. If your intention is to indicate ALL, use the '*' character inside the string");
     }
     dependencyInjectors.Add(injectorMaker);
 }
コード例 #2
0
        public IDependencyInjectorMaker GetInjectorMaker(string controllerName)
        {
            IDependencyInjectorMaker controllerMaker = dependencyInjectors.FirstOrDefault(di => di.ControllerName.Equals(controllerName));

            if (controllerMaker == null)
            {
                controllerMaker = dependencyInjectors.FirstOrDefault(di => di.ControllerName.Equals("*"));
            }
            return(controllerMaker);
        }
コード例 #3
0
        public void RegisterDependencyInjectorMaker(IDependencyInjectorMaker injectorMaker)
        {
            if (injectorMaker == null)
            {
                throw new Exception("Cannot be null");
            }

            if (DependencyInjectorMakers == null)
            {
                DependencyInjectorMakers = new List <IDependencyInjectorMaker>();
            }
            DependencyInjectorMakers.Add(injectorMaker);
        }
コード例 #4
0
        public IController InstantiateController(string name, RequestBody requestBody)
        {
            try
            {
                ControllerRegister register = GetControllerRegister(name);
                if (register == null)
                {
                    throw new Exception($"Controller '{name}' not registered or not found");
                }
                IDependencyInjectorMaker injector = null;

                object[] injectArgs = null;
                if (!name.Equals("ServerInfoController"))
                {
                    IDependencyInjectionService diService = serviceManager.GetService <IDependencyInjectionService>();
                    injector = diService.GetInjectorMaker(name);

                    if (injector != null)
                    {
                        Stopwatch sw = new Stopwatch();
                        sw.Start();
                        injectArgs = injector.BuildInjectValues(requestBody);
                        sw.Stop();

                        if (telemetry != null)
                        {
                            telemetry.Collect(new DependencyInjectorExecutionTime(injector.ControllerName, sw.ElapsedMilliseconds));
                        }
                    }
                }

                IController controller = (IController)Activator.CreateInstance(register.Type, injectArgs);
                return(controller);
            }
            catch (Exception ex)
            {
                ILoggingService logger = serviceManager.GetService <ILoggingService>();
                string          msg    = ex.Message;
                if (ex.InnerException != null)
                {
                    msg += ex.InnerException.Message;
                }
                logger.WriteLog($@"Instantiate controller '{name}' threw an exception. 
{msg}", name, "", ServerLogType.ERROR);
                throw new Exception($@"Instantiate controller '{name}' threw an exception. 
{msg}");
            }
        }
コード例 #5
0
        /// <summary>
        /// Adds a dependency injection helper for server controllers
        /// </summary>
        /// <param name="dependencyInjector">Implementation of injector helper</param>
        protected void AddDependencyInjector(IDependencyInjectorMaker dependencyInjector)
        {
            IDependencyInjectionService service = Services.GetService <IDependencyInjectionService>();

            service.AddDependencyInjector(dependencyInjector);
        }