예제 #1
0
        /// <summary>
        /// Creates middleware object from descriptor
        /// </summary>
        private IMiddleware CreateInstance(MiddlewareDescriptor descriptor)
        {
            if (descriptor.Instance != null)
            {
                return(descriptor.Instance);
            }

            if (descriptor.ConstructorParameters.Length == 0)
            {
                return((IMiddleware)Activator.CreateInstance(descriptor.MiddlewareType));
            }

            object[] parameters = new object[descriptor.ConstructorParameters.Length];

            for (int i = 0; i < descriptor.ConstructorParameters.Length; i++)
            {
                Type type = descriptor.ConstructorParameters[i];

                if (typeof(IServiceScope).IsAssignableFrom(type))
                {
                    parameters[i] = _scope;
                }
                else
                {
                    parameters[i] = _scope.ServiceProvider.GetService(type);
                }
            }

            return((IMiddleware)Activator.CreateInstance(descriptor.MiddlewareType, parameters));
        }
예제 #2
0
        /// <summary>
        /// Uses singleton middleware objects.
        /// Same object is used for all requests
        /// </summary>
        public void UseMiddleware(IMiddleware middleware)
        {
            MiddlewareDescriptor desc = new MiddlewareDescriptor
            {
                Instance              = middleware,
                MiddlewareType        = middleware.GetType(),
                ConstructorParameters = null
            };

            Descriptors.Add(desc);
        }
예제 #3
0
        /// <summary>
        /// Uses middleware, creates new instance for per request.
        /// </summary>
        public void UseMiddleware <TMiddleware>() where TMiddleware : IMiddleware
        {
            ConstructorInfo ctor = typeof(TMiddleware).GetConstructors().FirstOrDefault();

            if (ctor == null)
            {
                throw new ArgumentException(typeof(TMiddleware) + " has no acceptable constructor");
            }

            MiddlewareDescriptor desc = new MiddlewareDescriptor
            {
                Instance              = null,
                MiddlewareType        = typeof(TMiddleware),
                ConstructorParameters = ctor.GetParameters().Select(x => x.ParameterType).ToArray()
            };

            Descriptors.Add(desc);
        }