Example #1
0
        public virtual void Init()
        {
            if (this.isInitEnvironment)
            {
                return;
            }

            this.isInitEnvironment = true;

            var rules = new RegisterRuleCollector(5);

            //注入引擎
            rules.RegisterInstance <IContainer>(this);

            //注入容器
            rules.RegisterInstance(this.ruleContainer, typeof(IRegisterRuleContainer));
            rules.RegisterInstance(this.ruleContainer, typeof(IRegisterRuleChangeable));
            rules.RegisterInstance(this.ruleContainer, typeof(IRegisterRuleQuery));

            //注入类型查找
            rules.RegisterInstance(this.typeFinder, typeof(ITypeFinder));

            //注入注册
            rules.RegisterInstance(this.serviceRegister, typeof(IServiceRegister));

            //注入解决
            rules.RegisterCallBack <IServiceLocator>(string.Empty, ComponentLifeStyle.Singleton, () => this.serviceLocator);

            //跟踪者
            rules.RegisterCallBack <ILifetimeScopeTracker>(string.Empty, ComponentLifeStyle.Singleton, () => this.scopeTracker);

            //注入解决
            rules.RegisterType(typeof(ConstructorList <>), typeof(IEnumerable <>));
            rules.RegisterType(typeof(ConstructorDictionary <,>), typeof(IDictionary <,>));

            //更新容器
            this.ruleContainer.Update(rules);

            //获取程序集
            this.assemblies = (this.filteringAssemblyProviderCallback == null ? new Assembly[0] : this.filteringAssemblyProviderCallback.Invoke().GetAssemblies());

            rules = new RegisterRuleCollector(100);
            this.OnIniting?.Invoke(this, new IContainerStartupEventArgs(this.typeFinder, this.assemblies, rules));

            /*更新容器*/
            this.ruleContainer.Update(rules);

            return;
        }