Exemple #1
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="container">コンポーネントを登録するコンテナ</param>
        /// <param name="type">登録するコンポーネントの型</param>
        /// <param name="name">登録するコンポーネントの名前</param>
        public SingletonComponentEntry(IComponentContainer container, Type type, string name)
        {
            componentType     = type;
            componentName     = name;
            componentInstance = null;

            injectionConstructorFunctor = null;
            foreach (ConstructorInfo ci in componentType.GetConstructors())
            {
                if (Attribute.IsDefined(ci, typeof(InjectionPointAttribute)))
                {
                    ArrayList arguments = new ArrayList();
                    foreach (ParameterInfo param in ci.GetParameters())
                    {
                        if (Attribute.IsDefined(param, typeof(ExplicitComponentAttribute)))
                        {
                            ExplicitComponentAttribute eca =
                                (ExplicitComponentAttribute)Attribute.GetCustomAttribute
                                    (param, typeof(ExplicitComponentAttribute));
                            arguments.Add(eca.CreateProvider(container));
                        }
                        else
                        {
                            arguments.Add(new TypedArgumentComponentProvider(container, param.ParameterType));
                        }
                    }
                    injectionConstructorFunctor = new BindFunctor(new ConstructorFunctor(ci), arguments.ToArray());
                }
            }

            foreach (MethodInfo mi in componentType.GetMethods())
            {
                if (Attribute.IsDefined(mi, typeof(InjectionPointAttribute)))
                {
                    ParameterInfo[] paramerters = mi.GetParameters();
                    ArrayList       arguments   = new ArrayList();
                    arguments.Add(new NotBoundArgument(0));
                    foreach (ParameterInfo param in paramerters)
                    {
                        arguments.Add(new TypedArgumentComponentProvider(container, param.ParameterType));
                    }
                    injectionFactors.Add(new BindFunctor(new MemberFunctor(mi), arguments.ToArray()));
                }
            }

            foreach (MethodInfo mi in componentType.GetMethods())
            {
                if (Attribute.IsDefined(mi, typeof(InitializationPointAttribute)))
                {
                    initializationFactors.Add(new MemberFunctor(mi));
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="container">コンポーネントが登録するコンテナ</param>
        /// <param name="instance">登録するコンポーネントのインスタンス</param>
        public OuterComponentEntry(IComponentContainer container, object instance)
        {
            componentType      = instance.GetType();
            componentName      = instance.GetType().FullName;
            componentInstance  = instance;
            isSolvedDependency = false;

            foreach (MethodInfo mi in componentType.GetMethods())
            {
                if (Attribute.IsDefined(mi, typeof(InjectionPointAttribute)))
                {
                    ArrayList arguments = new ArrayList();
                    arguments.Add(new NotBoundArgument(0));
                    foreach (ParameterInfo param in mi.GetParameters())
                    {
                        if (Attribute.IsDefined(param, typeof(ExplicitComponentAttribute)))
                        {
                            ExplicitComponentAttribute eca =
                                (ExplicitComponentAttribute)Attribute.GetCustomAttribute
                                    (param, typeof(ExplicitComponentAttribute));
                            arguments.Add(eca.CreateProvider(container));
                        }
                        else
                        {
                            arguments.Add(new TypedArgumentComponentProvider(container, param.ParameterType));
                        }
                    }
                    injectionFactors.Add(new BindFunctor(new MemberFunctor(mi), arguments.ToArray()));
                }
            }

            foreach (MethodInfo mi in componentType.GetMethods())
            {
                if (Attribute.IsDefined(mi, typeof(InitializationPointAttribute)))
                {
                    initializationFactors.Add(new MemberFunctor(mi));
                }
            }
        }