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); }
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); }
public void RegisterDependencyInjectorMaker(IDependencyInjectorMaker injectorMaker) { if (injectorMaker == null) { throw new Exception("Cannot be null"); } if (DependencyInjectorMakers == null) { DependencyInjectorMakers = new List <IDependencyInjectorMaker>(); } DependencyInjectorMakers.Add(injectorMaker); }
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}"); } }
/// <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); }