Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="info"></param>
        public override void OnMetadataRegistered(IComponentInfo info)
        {
            var componentType = info.Implementation;

            DependencyManager.Refresh(info, Kernel);

            if (!info.IsGenericType())
            {
                if (info.Activator == ActivatorType.Default)
                {
                    ResolveConstructorInjection(info, componentType);
                }
                if (componentType != null)
                {
                    ResolveInjectionInfo(info, componentType, componentType.FullName + ":InjectionInfos");
                }
            }

            reinjectionManager.Reinjection(info.Implementation, Kernel);
        }
Esempio n. 2
0
        /// <summary>
        /// 将组件实例所依赖的其它组件都通过容器自动注入进来
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        public IServiceRegistry Compose(object instance)
        {
            Guard.NotNull(instance, "instance");
            var info = new ComponentInfo(instance.GetType());

            if (!Listner.OnMetadataRegistering(info))
            {
                return(this);
            }

            Listner.OnMetadataRegistered(info);
            var ctx = new ComponentContext(this, null)
            {
                Instance = instance, Component = info
            };

            Listner.OnPostCreation(ctx);
            Listner.OnInitialization(ctx);
            Listner.OnPostInitialization(ctx);
            //重组
            reinjectionManager.Reinjection(info.Implementation, this);
            Listner.OnMetadataUnregistered(info);
            return(this);
        }