Exemple #1
0
        public override void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipCreationPolicy)
            {
                _log.Verbose("Factory policy is skipped.");
                return;
            }

            IReflector r = Reflector.Bind(_factoryType, ReflectorPolicy.TypeAll);
            MethodBase[] methods = FilterByHintsAndSort(r.GetMethods(_methodName));
            if (methods.Length == 0)
                ExceptionHelper.ThrowNoValidMethod(_factoryType, _methodName);
            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                {
                    object[] args = PrepareArgs(ctx, method);
                    object instance = r.Invoke(_methodName, args);
                    ctx.Instance = instance;
                    _log.Verbose("Factory policy create an instance of type [{0}].", instance.GetType());
                    return;
                }
            }

            _log.Debug("Factory policy create instance fail.");
            ExceptionHelper.ThrowMethodNotReady(_factoryType, _methodName);
        }
Exemple #2
0
        public override void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipCreationPolicy)
            {
                _log.Verbose("Activator policy is skipped.");
                return;
            }

            ConstructorInfo[] ctors = ctx.ComponentType.GetConstructors();
            MethodBase[] methods = FilterByHintsAndSort(ctors);
            if (methods.Length == 0)
                ExceptionHelper.ThrowNoValidConstructor(ctx.ComponentType);
            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                {
                    object[] args = PrepareArgs(ctx, method);
                    object instance = Activator.CreateInstance(ctx.ComponentType, args);
                    ctx.Instance = instance;
                    _log.Verbose("Activator policy create an instance of type [{0}].", instance.GetType());
                    return;
                }
            }

            _log.Debug("Activator policy create instance fail.");
            ExceptionHelper.ThrowConstructorNotReady(ctx.ComponentType);
        }
Exemple #3
0
        private object Lookup(IComponentInfo info)
        {
            _log.Info("Start build object [{0}].", info.Id);

            try
            {
                IObjectBuildContext ctx = _b.Build(info);
                if (ctx.LifeCycleManagement)
                {
                    _lifecycleContainer[ctx.Instance] = ctx;
                }
                _log.Info("Build object [{0}] success.", info.Id);
                return(ctx.Instance);
            }
            catch (ObjectBuilderException)
            {
                _log.Warning("Build object [{0}] fail.", info.Id);
                throw;
            }
            catch (ManifestException)
            {
                _log.Warning("Build object [{0}] fail.", info.Id);
                throw;
            }
            catch (Exception ex)
            {
                _log.Warning("Build object [{0}] fail.", info.Id);
                ex.CreateWrapException <ObjectBuilderException>();
                return(null);
            }
        }
Exemple #4
0
        public override void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipCreationPolicy)
            {
                _log.Verbose("Factory policy is skipped.");
                return;
            }

            IReflector r = Reflector.Bind(_factoryType, ReflectorPolicy.TypeAll);

            MethodBase[] methods = FilterByHintsAndSort(r.GetMethods(_methodName));
            if (methods.Length == 0)
            {
                ExceptionHelper.ThrowNoValidMethod(_factoryType, _methodName);
            }
            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                {
                    object[] args     = PrepareArgs(ctx, method);
                    object   instance = r.Invoke(_methodName, args);
                    ctx.Instance = instance;
                    _log.Verbose("Factory policy create an instance of type [{0}].", instance.GetType());
                    return;
                }
            }

            _log.Debug("Factory policy create instance fail.");
            ExceptionHelper.ThrowMethodNotReady(_factoryType, _methodName);
        }
Exemple #5
0
        public static object Build(string val, Type targetType, IObjectBuildContext ctx)
        {
            //Note:If it is injection, save it in to ctx.InjectedParameters
            if (string.IsNullOrEmpty(val))
            {
                object result = ctx.Kernal.Lookup(targetType);
                ctx.InjectedParameters.Add(result);
                return(result);
            }

            if (val.BracketedBy(StringPair.Template_Bracket))
            {
                string id = val.UnBracketing(StringPair.Template_Bracket);
                if (id == NULL)
                {
                    return(null);
                }
                object result = ctx.Kernal.Lookup(id);
                ctx.InjectedParameters.Add(result);
                return(result);
            }
            else
            {
                return(TypeCast.ChangeToTypeOrNullableType(val, targetType));
            }
        }
Exemple #6
0
        public bool ReadyToBuild(IObjectBuildContext ctx)
        {
            Type       targetType = (ctx.ComponentType != null) ? ctx.ComponentType : ctx.ServiceType;
            IReflector r          = Reflector.Bind(targetType, ReflectorPolicy.TypePublic);

            return(PolicyUtility.IsReady(_propertyValue, r.GetPropertyType(_propertyName), ctx));
        }
Exemple #7
0
        public override void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipCreationPolicy)
            {
                _log.Verbose("Activator policy is skipped.");
                return;
            }

            ConstructorInfo[] ctors   = ctx.ComponentType.GetConstructors();
            MethodBase[]      methods = FilterByHintsAndSort(ctors);
            if (methods.Length == 0)
            {
                ExceptionHelper.ThrowNoValidConstructor(ctx.ComponentType);
            }
            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                {
                    object[] args     = PrepareArgs(ctx, method);
                    object   instance = Activator.CreateInstance(ctx.ComponentType, args);
                    ctx.Instance = instance;
                    _log.Verbose("Activator policy create an instance of type [{0}].", instance.GetType());
                    return;
                }
            }

            _log.Debug("Activator policy create instance fail.");
            ExceptionHelper.ThrowConstructorNotReady(ctx.ComponentType);
        }
Exemple #8
0
        public void TearDown(object instance, IObjectBuildContext ctx)
        {
            IDisposable d = instance as IDisposable;

            if (d != null)
            {
                d.Dispose();
            }
        }
Exemple #9
0
        public void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipCreationPolicy)
            {
                _log.Verbose("Instance policy is skipped.");
                return;
            }

            _log.Verbose("Instance policy return instance of type [{0}].", _instance.GetType());
            ctx.Instance = _instance;
        }
Exemple #10
0
        public void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipCreationPolicy)
            {
                _log.Verbose("Instance policy is skipped.");
                return;
            }

            _log.Verbose("Instance policy return instance of type [{0}].", _instance.GetType());
            ctx.Instance = _instance;
        }
Exemple #11
0
        public void BuildUp(IObjectBuildContext ctx)
        {
            if (ctx.SkipInitializationPolicy)
            {
                return;
            }

            IReflector r   = Reflector.Bind(ctx.Instance);
            object     val = PolicyUtility.Build(_propertyValue, r.GetPropertyType(_propertyName), ctx);

            r.SetPropertyValue(_propertyName, val);
        }
Exemple #12
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
     //Note:Reverse order to teardown
     _log.Debug("Teardown [PostInitialization] policies.");
     TearDownSteps(instance, ctx, Stages.PostInitialization);
     _log.Debug("Teardown [Initialization] policies.");
     TearDownSteps(instance, ctx, Stages.Initialization);
     _log.Debug("Teardown [Creation] policies.");
     TearDownSteps(instance, ctx, Stages.Creation);
     _log.Debug("Teardown [PreCreation] policies.");
     TearDownSteps(instance, ctx, Stages.PreCreation);
     _log.Debug("Teardown complete.");
 }
Exemple #13
0
        public virtual void TearDown(object instance, IObjectBuildContext ctx)
        {
            if (!ctx.LifeCycleManagement || !_teardown)
                return;

            if (ctx.SkipCreationPolicy)
                return;

            foreach (object injection in ctx.InjectedParameters)
            {
                ctx.Kernal.TearDown(injection);
            }
        }
Exemple #14
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
     //Note:Reverse order to teardown
     _log.Debug("Teardown [PostInitialization] policies.");
     TearDownSteps(instance, ctx, Stages.PostInitialization);
     _log.Debug("Teardown [Initialization] policies.");
     TearDownSteps(instance, ctx, Stages.Initialization);
     _log.Debug("Teardown [Creation] policies.");
     TearDownSteps(instance, ctx, Stages.Creation);
     _log.Debug("Teardown [PreCreation] policies.");
     TearDownSteps(instance, ctx, Stages.PreCreation);
     _log.Debug("Teardown complete.");
 }
Exemple #15
0
        private static void OnObjectBuilt(IObjectBuildContext ctx)
        {
            var instance = ctx.ObjectInstance;

            if (instance == null)
            {
                return;
            }
            SetObjectSetting(ctx.ServiceLocator, ctx.ObjectSetting, instance);
            if (!RemotingServices.IsTransparentProxy(instance) && instance is IInitializable)
            {
                ((IInitializable)instance).Init();
            }
        }
Exemple #16
0
        public override bool ReadyToBuild(IObjectBuildContext ctx)
        {
            ConstructorInfo[] ctors = ctx.ComponentType.GetConstructors();
            MethodBase[] methods = FilterByHintsAndSort(ctors);
            if (methods.Length == 0)
                return false;

            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                    return true;
            }
            return false;
        }
Exemple #17
0
        public override bool ReadyToBuild(IObjectBuildContext ctx)
        {
            IReflector r = Reflector.Bind(_factoryType, ReflectorPolicy.TypePublic);
            MethodBase[] methods = FilterByHintsAndSort(r.GetMethods(this._methodName));
            if (methods.Length == 0)
                return false;

            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                    return true;
            }
            return false;
        }
Exemple #18
0
 private static void BuildUpSteps(IObjectBuildContext ctx, Stages stage)
 {
     try
     {
         for (int idx = 0; idx < ctx.Policies.Count; idx++)
         {
             if (ctx.Policies[idx].Stage == stage)
                 ctx.Policies[idx].BuildUp(ctx);
         }
     }
     catch (Exception ex)
     {
         ExceptionHelper.ThrowBuildUpError(ex, stage);
     }
 }
Exemple #19
0
        public void BuildUp(IObjectBuildContext ctx)
        {
            if (_instance != null)
            {
                _log.Verbose("Singleton policy already hold an instance.");

                ctx.Instance                     = _instance;
                ctx.SkipCreationPolicy           = true;
                ctx.SkipInitializationPolicy     = true;
                ctx.SkipPostInitializationPolicy = true;
            }
            else
            {
                _log.Verbose("Singleton policy hold nothing, pass to next policy.");
            }
        }
Exemple #20
0
        public static bool IsReady(string val, Type targetType, IObjectBuildContext ctx)
        {
            if (string.IsNullOrEmpty(val))
                return ctx.Kernal.ReadyToBuild(targetType);

            if (val.BracketedBy(StringPair.Template_Bracket))
            {
                string id = val.UnBracketing(StringPair.Template_Bracket);
                if (id == NULL)
                    return true;
                else
                    return ctx.Kernal.ReadyToBuild(id);
            }
            else
                return true;
        }
Exemple #21
0
        public void BuildUp(IObjectBuildContext ctx)
        {
            if (_instance != null)
            {
                _log.Verbose("Singleton policy already hold an instance.");

                ctx.Instance = _instance;
                ctx.SkipCreationPolicy = true;
                ctx.SkipInitializationPolicy = true;
                ctx.SkipPostInitializationPolicy = true;
            }
            else
            {
                _log.Verbose("Singleton policy hold nothing, pass to next policy.");
            }
        }
Exemple #22
0
 private static void TearDownSteps(object instance, IObjectBuildContext ctx, Stages stage)
 {
     try
     {
         for (int idx = ctx.Policies.Count - 1; idx >= 0; idx--)
         {
             if (ctx.Policies[idx].Stage == stage)
             {
                 ctx.Policies[idx].TearDown(instance, ctx);
             }
         }
     }
     catch (Exception ex)
     {
         ExceptionHelper.ThrowTearDownError(ex, stage);
     }
 }
Exemple #23
0
 private static void BuildUpSteps(IObjectBuildContext ctx, Stages stage)
 {
     try
     {
         for (int idx = 0; idx < ctx.Policies.Count; idx++)
         {
             if (ctx.Policies[idx].Stage == stage)
             {
                 ctx.Policies[idx].BuildUp(ctx);
             }
         }
     }
     catch (Exception ex)
     {
         ExceptionHelper.ThrowBuildUpError(ex, stage);
     }
 }
Exemple #24
0
        public virtual void TearDown(object instance, IObjectBuildContext ctx)
        {
            if (!ctx.LifeCycleManagement || !_teardown)
            {
                return;
            }

            if (ctx.SkipCreationPolicy)
            {
                return;
            }

            foreach (object injection in ctx.InjectedParameters)
            {
                ctx.Kernal.TearDown(injection);
            }
        }
Exemple #25
0
        public override bool ReadyToBuild(IObjectBuildContext ctx)
        {
            ConstructorInfo[] ctors   = ctx.ComponentType.GetConstructors();
            MethodBase[]      methods = FilterByHintsAndSort(ctors);
            if (methods.Length == 0)
            {
                return(false);
            }

            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                {
                    return(true);
                }
            }
            return(false);
        }
Exemple #26
0
 public void OnBuildComplete(IObjectBuildContext ctx)
 {
     lock (_lock)
     {
         if (_instance == null)
             _instance = ctx.Instance;
         else
         {
             if (!Object.ReferenceEquals(_instance, ctx.Instance))
             {
                 //Note:Another thread create an instance already, release instance build by this thread
                 ctx.Kernal.TearDown(ctx.Instance);
                 //Note:And return the instance created by other thread.
                 ctx.Instance = _instance;
             }
         }
     }
 }
Exemple #27
0
        protected bool IsReady(MethodBase method, IObjectBuildContext ctx)
        {
            foreach (ParameterInfo pInfo in method.GetParameters())
            {
                string key = pInfo.Name;

                if ((!_injectionHints.ContainsKey(key)) && pInfo.IsOptional)
                    continue;
                else
                {
                    string val = null;
                    _injectionHints.TryGetValue(key, out val);
                    if (!PolicyUtility.IsReady(val, pInfo.ParameterType, ctx))
                        return false;
                }
            }

            return true;
        }
Exemple #28
0
        public override bool ReadyToBuild(IObjectBuildContext ctx)
        {
            IReflector r = Reflector.Bind(_factoryType, ReflectorPolicy.TypePublic);

            MethodBase[] methods = FilterByHintsAndSort(r.GetMethods(this._methodName));
            if (methods.Length == 0)
            {
                return(false);
            }

            foreach (MethodBase method in methods)
            {
                if (IsReady(method, ctx))
                {
                    return(true);
                }
            }
            return(false);
        }
Exemple #29
0
 public void OnBuildComplete(IObjectBuildContext ctx)
 {
     lock (_lock)
     {
         if (_instance == null)
         {
             _instance = ctx.Instance;
         }
         else
         {
             if (!Object.ReferenceEquals(_instance, ctx.Instance))
             {
                 //Note:Another thread create an instance already, release instance build by this thread
                 ctx.Kernal.TearDown(ctx.Instance);
                 //Note:And return the instance created by other thread.
                 ctx.Instance = _instance;
             }
         }
     }
 }
Exemple #30
0
        protected object[] PrepareArgs(IObjectBuildContext ctx, MethodBase method)
        {
            ParameterInfo[] pInfos = method.GetParameters();
            object[]        args   = new object[pInfos.Length];
            string          val;

            for (int idx = 0; idx < args.Length; idx++)
            {
                ParameterInfo pInfo = pInfos[idx];

                bool hint = _injectionHints.TryGetValue(pInfo.Name, out val);
                if (!hint && pInfo.IsOptional)
                {
                    args[idx] = pInfo.DefaultValue;
                }
                else
                {
                    args[idx] = PolicyUtility.Build(val, pInfo.ParameterType, ctx);
                }
            }
            return(args);
        }
Exemple #31
0
        public void TearDown(object instance, IObjectBuildContext ctx)
        {
            if (!ctx.LifeCycleManagement || !_teardown)
            {
                return;
            }
            if (ctx.SkipInitializationPolicy)
            {
                return;
            }

            //Note:Not care about "direct casted value", it's not coming from container.
            if (_propertyValue == null || (_propertyValue.StartsWith("#{") && _propertyValue.EndsWith("}")))
            {
                IReflector r   = Reflector.Bind(ctx.Instance);
                object     val = r.GetPropertyValue(_propertyName);
                if (!val.GetType().IsValueType)
                {
                    r.SetPropertyValue(_propertyName, null);
                }
                ctx.Kernal.TearDown(val);
            }
        }
Exemple #32
0
        protected bool IsReady(MethodBase method, IObjectBuildContext ctx)
        {
            foreach (ParameterInfo pInfo in method.GetParameters())
            {
                string key = pInfo.Name;

                if ((!_injectionHints.ContainsKey(key)) && pInfo.IsOptional)
                {
                    continue;
                }
                else
                {
                    string val = null;
                    _injectionHints.TryGetValue(key, out val);
                    if (!PolicyUtility.IsReady(val, pInfo.ParameterType, ctx))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemple #33
0
        public static object Build(string val, Type targetType, IObjectBuildContext ctx)
        {
            //Note:If it is injection, save it in to ctx.InjectedParameters
            if (string.IsNullOrEmpty(val))
            {
                object result = ctx.Kernal.Lookup(targetType);
                ctx.InjectedParameters.Add(result);
                return result;
            }

            if (val.BracketedBy(StringPair.Template_Bracket))
            {
                string id = val.UnBracketing(StringPair.Template_Bracket);
                if (id == NULL)
                    return null;
                object result = ctx.Kernal.Lookup(id);
                ctx.InjectedParameters.Add(result);
                return result;
            }
            else
            {
                return TypeCast.ChangeToTypeOrNullableType(val, targetType);
            }
        }
Exemple #34
0
        public static bool IsReady(string val, Type targetType, IObjectBuildContext ctx)
        {
            if (string.IsNullOrEmpty(val))
            {
                return(ctx.Kernal.ReadyToBuild(targetType));
            }

            if (val.BracketedBy(StringPair.Template_Bracket))
            {
                string id = val.UnBracketing(StringPair.Template_Bracket);
                if (id == NULL)
                {
                    return(true);
                }
                else
                {
                    return(ctx.Kernal.ReadyToBuild(id));
                }
            }
            else
            {
                return(true);
            }
        }
Exemple #35
0
 public override void OnBuildComplete(IObjectBuildContext ctx)
 {
     //Note:Nothing to do.
 }
Exemple #36
0
 public abstract bool ReadyToBuild(IObjectBuildContext ctx);
Exemple #37
0
        protected object[] PrepareArgs(IObjectBuildContext ctx, MethodBase method)
        {
            ParameterInfo[] pInfos = method.GetParameters();
            object[] args = new object[pInfos.Length];
            string val;
            for (int idx = 0; idx < args.Length; idx++)
            {
                ParameterInfo pInfo = pInfos[idx];

                bool hint = _injectionHints.TryGetValue(pInfo.Name, out val);
                if (!hint && pInfo.IsOptional)
                    args[idx] = pInfo.DefaultValue;
                else
                    args[idx] = PolicyUtility.Build(val, pInfo.ParameterType, ctx);
            }
            return args;
        }
Exemple #38
0
 public abstract bool ReadyToBuild(IObjectBuildContext ctx);
Exemple #39
0
 public void BuildUp(IObjectBuildContext ctx)
 {
     //Note:Nothing to do.
 }
Exemple #40
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
 }
Exemple #41
0
 public abstract void OnBuildComplete(IObjectBuildContext ctx);
Exemple #42
0
 public abstract void BuildUp(IObjectBuildContext ctx);
Exemple #43
0
 private static void TearDownSteps(object instance, IObjectBuildContext ctx, Stages stage)
 {
     try
     {
         for (int idx = ctx.Policies.Count - 1; idx >= 0; idx--)
         {
             if (ctx.Policies[idx].Stage == stage)
                 ctx.Policies[idx].TearDown(instance, ctx);
         }
     }
     catch (Exception ex)
     {
         ExceptionHelper.ThrowTearDownError(ex, stage);
     }
 }
Exemple #44
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
     //Note:Nothing to do.
 }
Exemple #45
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
     IDisposable d = instance as IDisposable;
     if (d != null)
         d.Dispose();
 }
Exemple #46
0
 public bool ReadyToBuild(IObjectBuildContext ctx)
 {
     return true;
 }
Exemple #47
0
 public void BuildUp(IObjectBuildContext ctx)
 {
 }
Exemple #48
0
 public void OnBuildComplete(IObjectBuildContext ctx)
 {
 }
Exemple #49
0
 public abstract void OnBuildComplete(IObjectBuildContext ctx);
Exemple #50
0
 public abstract void BuildUp(IObjectBuildContext ctx);
Exemple #51
0
 public bool ReadyToBuild(IObjectBuildContext ctx)
 {
     return(true);
 }
Exemple #52
0
 public void BuildUp(IObjectBuildContext ctx)
 {
 }
Exemple #53
0
 public void OnBuildComplete(IObjectBuildContext ctx)
 {
 }
Exemple #54
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
     //Note:Nothing to do.
 }
Exemple #55
0
 public void TearDown(object instance, IObjectBuildContext ctx)
 {
 }
Exemple #56
0
 public override void OnBuildComplete(IObjectBuildContext ctx)
 {
     //Note:Nothing to do.
 }