Example #1
0
 private string GetConnectionName(IInjectionPoint injectionPoint)
 {
     return(injectionPoint.Qualifiers.OfType <EntityContextAttribute>()
            .Select(x => x.ConnectionName)
            .DefaultIfEmpty("Default")
            .First());
 }
Example #2
0
            public virtual DbContext GetContext(IInjectionPoint injectionPoint)
            {
                var connectionName = GetConnectionName(injectionPoint);

                return(_contexts.GetOrAdd(connectionName, new CormoDbContext(connectionName,
                                                                             _entityTypes.Select(x => GetEntityInfo(_manager, x)).ToArray())));
            }
Example #3
0
        protected T GetCookieParam <T>(IInjectionPoint ip)
        {
            if (ip == null)
            {
                throw new InjectionException("CookieParam needs injection point");
            }

            var context   = HttpContext.Current;
            var converter = TypeDescriptor.GetConverter(typeof(T));

            if (context == null || converter == null)
            {
                throw new UnsatisfiedDependencyException(ip);
            }

            var httpCookie = context.Request.Cookies.Get(GetCookieName(ip));

            if (httpCookie == null)
            {
                return(GetDefaultValue <T>(ip));
            }

            var cookieValue = httpCookie.Value;

            return((T)converter.ConvertFromString(cookieValue));
        }
Example #4
0
        public IComponent GetComponent(IInjectionPoint injectionPoint)
        {
            var components = GetComponents(injectionPoint.ComponentType, injectionPoint.Qualifiers.ToArray()).ToArray();

            ResolutionValidator.ValidateSingleResult(injectionPoint, components);
            return(components.Single());
        }
Example #5
0
 public UnsatisfiedDependencyException(IInjectionPoint inject) :
     base(string.Format("Unsatisfied depdendency for {0}", inject))
 {
     Type           = inject.ComponentType;
     Qualifiers     = inject.Qualifiers.ToArray();
     InjectionPoint = inject;
 }
Example #6
0
        protected T GetHeaderParam <T>(IInjectionPoint ip)
        {
            if (ip == null)
            {
                throw new InjectionException("HeaderParam needs injection point");
            }

            var context   = HttpContext.Current;
            var converter = TypeDescriptor.GetConverter(typeof(T));

            if (context == null || converter == null)
            {
                throw new UnsatisfiedDependencyException(ip);
            }

            try
            {
                var header = context.Request.Headers.Get(GetHeaderName(ip));
                if (header != null)
                {
                    return((T)converter.ConvertFromString(header));
                }
            }
            catch (Exception)
            {
                // TODO: LOG
            }

            return(GetDefaultValue <T>(ip));
        }
Example #7
0
        private object GetReference(IInjectionPoint injectionPoint, IComponent component, ICreationalContext creationalContext, params Type[] proxyTypes)
        {
            var pushInjectionPoint = injectionPoint != null && injectionPoint.ComponentType != typeof(IInjectionPoint);

            try
            {
                if (pushInjectionPoint)
                {
                    _currentInjectionPoint.Push(injectionPoint);
                }


                if (proxyTypes.Any() && component.IsProxyRequired)
                {
                    foreach (var proxyType in proxyTypes)
                    {
                        InjectionValidator.ValidateProxiable(proxyType, injectionPoint);
                    }

                    return(CormoProxyGenerator.CreateProxy(proxyTypes,
                                                           () =>
                    {
                        try
                        {
                            if (pushInjectionPoint)
                            {
                                _currentInjectionPoint.Push(injectionPoint);
                            }
                            return GetReference(injectionPoint, component, creationalContext, new Type[0]);
                        }
                        finally
                        {
                            if (pushInjectionPoint)
                            {
                                _currentInjectionPoint.Pop();
                            }
                        }
                    }));
                }

                var context = creationalContext as IWeldCreationalContext;
                if (context != null)
                {
                    var incompleteInstance = context.GetIncompleteInstance(component);
                    if (incompleteInstance != null)
                    {
                        return(incompleteInstance);
                    }
                }
                creationalContext = creationalContext.GetCreationalContext(component);
                return(GetContext(component.Scope).Get(component, creationalContext));
            }
            finally
            {
                if (pushInjectionPoint)
                {
                    _currentInjectionPoint.Pop();
                }
            }
        }
Example #8
0
        public T GetValue <T>(IInjectionPoint injectionPoint, IInstance <IValueProvider> providers)
        {
            if (injectionPoint == null)
            {
                throw new InjectionException("Value needs injection point");
            }
            var converter = TypeDescriptor.GetConverter(typeof(T));

            if (converter == null)
            {
                throw new UnsatisfiedDependencyException(injectionPoint);
            }

            var name = GetValueName(injectionPoint);

            foreach (var provider in providers)
            {
                var value = provider.GetValue(name);
                try
                {
                    return((T)converter.ConvertFromString(value));
                }
                catch (Exception e)
                {
                    // TODO log
                }
            }

            return(GetDefaultValue <T>(injectionPoint));
        }
 public AmbiguousResolutionException(IInjectionPoint inject, IComponent[] registrations)
     : base(ConstructMessage(inject, registrations))
 {
     InjectionPoint = inject;
     Type           = inject.ComponentType;
     Qualifiers     = inject.Qualifiers.ToArray();
     Registrations  = registrations;
 }
Example #10
0
        public Instance(WeldComponentManager manager, IQualifier[] qualifiers, IWeldComponent[] components, ICreationalContext creationalContext)
        {
            _qualifiers        = qualifiers;
            _components        = components;
            _creationalContext = creationalContext;

            _currentInjectionPoint = manager.GetService <CurrentInjectionPoint>();
            _injectionPoint        = _currentInjectionPoint.Peek();
        }
Example #11
0
        public static void ValidateProxiable(Type type, IInjectionPoint injectionPoint)
        {
            var error = CheckProxiable(type);

            if (error != null)
            {
                var message = Formatters.FormatUnproxiableType(injectionPoint, error);
                throw new NonProxiableTypeException(type, message);
            }
        }
Example #12
0
        protected T GetDefaultValue <T>(IInjectionPoint ip)
        {
            var attrDefault = ip.Qualifiers.OfType <HeaderParamAttribute>().Select(x => x.Default).OfType <T>().ToArray();

            if (attrDefault.Any())
            {
                return(attrDefault[0]);
            }

            return(default(T));
        }
Example #13
0
 public static void ValidateSingleResult(IInjectionPoint injectionPoint, IComponent[] components)
 {
     if (components.Length > 1)
     {
         throw new AmbiguousResolutionException(injectionPoint, components.ToArray());
     }
     if (!components.Any())
     {
         throw new UnsatisfiedDependencyException(injectionPoint);
     }
 }
Example #14
0
        public object GetInjectableReference(IInjectionPoint injectionPoint, ICreationalContext creationalContext)
        {
            var proxyTypes = new [] { injectionPoint.ComponentType };
            var weldIp     = injectionPoint as IWeldInjetionPoint;

            if (weldIp != null && weldIp.Unwraps)
            {
                proxyTypes = new Type[0];
            }

            return(GetReference(injectionPoint, injectionPoint.Component, creationalContext, proxyTypes));
        }
Example #15
0
        protected string GetHeaderName(IInjectionPoint ip)
        {
            var attrName = ip.Qualifiers.OfType <HeaderParamAttribute>().Select(x => x.Name).SingleOrDefault();

            if (string.IsNullOrEmpty(attrName))
            {
                var methodParam = ip as IMethodParameterInjectionPoint;
                if (methodParam != null)
                {
                    return(methodParam.ParameterInfo.Name);
                }

                return(ip.Member.Name);
            }
            return(attrName);
        }
Example #16
0
        T GetQueryParam <T>(IInjectionPoint ip)
        {
            var context   = HttpContext.Current;
            var converter = TypeDescriptor.GetConverter(typeof(T));

            if (context == null || converter == null)
            {
                throw new UnsatisfiedDependencyException(ip);
            }

            var name  = GetQueryName(ip);
            var value = context.Request.QueryString[name];

            if (value == null)
            {
                return(default(T));
            }

            return((T)converter.ConvertFromString(value));
        }
Example #17
0
        T GetRouteParam <T>(IInjectionPoint ip, HttpRequestMessage request)
        {
            if (ip == null)
            {
                throw new InjectionException("RouteParam needs injection point");
            }

            var converter = TypeDescriptor.GetConverter(typeof(T));

            if (request == null || converter == null)
            {
                throw new UnsatisfiedDependencyException(ip);
            }

            var name      = GetRouteName(ip);
            var routeData = request.GetRouteData();

            if (routeData == null)
            {
                throw new UnsatisfiedDependencyException(ip);
            }

            object value;

            if (TryGetRouteValue(routeData, name, out value))
            {
                try
                {
                    return((T)converter.ConvertFromString(value.ToString()));
                }
                catch (Exception e)
                {
                    // TODO log
                }
            }

            return(GetDefaultValue <T>(ip));
        }
Example #18
0
 public static string FormatUnproxiableType(IInjectionPoint injectionPoint, string reason)
 {
     return(string.Format("Normal-scoped component must be proxyable, consider using IInstance<> instead. {0}Reason: {1}",
                          injectionPoint == null ? "" : "Injected at: " + injectionPoint + ". ",
                          reason));
 }
Example #19
0
 public object GetReference(IInjectionPoint injectionPoint)
 {
     return(_componentManager.GetInjectableReference(injectionPoint, _creationalContext));
 }
Example #20
0
 DbContext GetDbContext(DbContexts contexts, IInjectionPoint injectionPoint)
 {
     return(contexts.GetContext(injectionPoint));
 }
Example #21
0
 public IDbSet <T> GetDbSet(DbContexts contexts, IInjectionPoint injectionPoint)
 {
     return(contexts.GetContext(injectionPoint).Set <T>());
 }
Example #22
0
 public void Push(IInjectionPoint injectionPoint)
 {
     _injectionPoints.Value.Push(injectionPoint);
 }
 private static string ConstructMessage(IInjectionPoint inject, IEnumerable <IComponent> components)
 {
     return(string.Format("Ambiguous dependency for {0}. Possible dependencies [{1}]", inject,
                          string.Join(",", components)));
 }
Example #24
0
        public static void ValidateProxiable(Type type, IInjectionPoint injectionPoint)
        {
            var error = _checkedProxyableTypes.GetOrAdd(type, _ =>
            {
                if (type.IsInterface /* || typeof (MulticastDelegate).IsAssignableFrom(type.BaseType) */)
                {
                    return(null);
                }

                var builder = new StringBuilder();
                if (type.IsValueType)
                {
                    builder.Append("value type");
                }

                if (type.IsPrimitive)
                {
                    builder.Append("primitive type");
                }

                if (type.IsSealed)
                {
                    builder.Append("class is sealed");
                }

                if (!TypeUtils.HasAccessibleDefaultConstructor(type))
                {
                    builder.Append("No public/protected parameterless constructor");
                }

                var sealedMembers = TypeUtils.GetSealedPublicMembers(type);
                if (sealedMembers.Any())
                {
                    builder.Append(
                        string.Format("These public members must be virtual: {0}",
                                      string.Join(",/n", sealedMembers.Select(x => x.ToString()))));
                }

                var publicFields = TypeUtils.GetPublicFields(type);
                if (publicFields.Any())
                {
                    builder.Append(
                        string.Format("Must not have public fields: {0}",
                                      string.Join(",/n", publicFields.Select(x => x.ToString()))));
                }

                if (builder.Length == 0)
                {
                    return(null);
                }
                return(builder.ToString());
            });

            if (error != null)
            {
                var message = string.Format("Normal-scoped component must be proxyable, consider using IInstance<> instead. {0}Reason: {1}",
                                            injectionPoint == null?"": "Injected at: " + injectionPoint + ".",
                                            error);
                throw new NonProxiableTypeException(type, message);
            }
        }