Exemple #1
0
        /// <summary>
        /// Get resource handler
        /// </summary>
        public IApiResourceHandler GetResourceHandler <TScope>(String resourceName)
        {
            IApiResourceHandler retVal = null;

            this.m_handlers.TryGetValue($"{typeof(TScope).Name}/{resourceName}", out retVal);
            return(retVal);
        }
Exemple #2
0
        /// <summary>
        /// Creates an single resource handler for a particular service
        /// </summary>
        /// <param name="resourceTypes">The type of resource handlers</param>
        public ResourceHandlerTool(IEnumerable <Type> resourceHandlerTypes, Type scope)
        {
            var serviceManager      = ApplicationServiceContext.Current.GetService <IServiceManager>();
            var tPropertyProviders  = serviceManager.CreateInjectedOfAll <IApiChildResourceHandler>();
            var tOperationProviders = serviceManager.CreateInjectedOfAll <IApiChildOperation>();

            foreach (var t in resourceHandlerTypes.Where(t => !t.ContainsGenericParameters && !t.IsAbstract && !t.IsInterface))
            {
                try
                {
                    IApiResourceHandler rh = serviceManager.CreateInjected(t) as IApiResourceHandler;
                    if (rh == null)
                    {
                        continue; // TODO: Emit a warning
                    }
                    if (rh.Scope == scope)
                    {
                        this.m_handlers.TryAdd($"{rh.Scope.Name}/{rh.ResourceName}", rh);
                        this.m_traceSource.TraceInfo("Adding {0} to {1}", rh.ResourceName, rh.Scope);

                        // Associated prop handler
                        if (rh is IChainedApiResourceHandler assoc)
                        {
                            tPropertyProviders.Where(p => p.ParentTypes.Contains(rh.Type) || p.ParentTypes == Type.EmptyTypes).ToList().ForEach(p => assoc.AddChildResource(p));
                        }
                        if (rh is IOperationalApiResourceHandler oper)
                        {
                            tOperationProviders.Where(p => p.ParentTypes.Contains(rh.Type) || p.ParentTypes == Type.EmptyTypes).ToList().ForEach(p => oper.AddOperation(p));
                        }
                    }
                }
                catch (Exception e)
                {
                    this.m_traceSource.TraceError("Error binding: {0} due to {1}", t.FullName, e);
                }
            }
        }