コード例 #1
0
        protected virtual void OnInit(IStartupSetting startupSetting)
        {
            var appSetting = ConfigSectionHandler.GetConfig("htb.devfx");
            var setting    = startupSetting ?? appSetting.ToSetting <StartupSetting>("startup");
            var assemblies = new List <Assembly>();

            if (setting != null && setting.CoreSetting != null && setting.CoreSetting.ConfigServiceSetting != null && setting.CoreSetting.ConfigServiceSetting.Assemblies != null)
            {
                var assemblySettings = setting.CoreSetting.ConfigServiceSetting.Assemblies;
                foreach (var assembly in assemblySettings)
                {
                    var dll = TypeHelper.AssemblyLoad(assembly.AssemblyName, false);
                    if (dll != null && !assemblies.Contains(dll))
                    {
                        assemblies.Add(dll);
                    }
                }
            }

            var rootSetting = ConfigHelper.LoadConfigSettingFromAssemblies(new[] { typeof(Esb.IServiceLocator).Assembly, typeof(ConfigService).Assembly }, assemblies, appSetting, setting);

            setting = rootSetting.ToSetting <StartupSetting>("htb.devfx/startup");
            IConfigServiceSetting configServiceSetting = null;

            if (setting != null && setting.CoreSetting != null && setting.CoreSetting.ConfigServiceSetting != null)
            {
                configServiceSetting = setting.CoreSetting.ConfigServiceSetting;
                if (setting.CoreSetting.ConfigServiceSetting.ConfigFiles != null && setting.CoreSetting.ConfigServiceSetting.ConfigFiles.Length > 0)
                {
                    var configFiles = new List <string>();
                    foreach (var fileSetting in setting.CoreSetting.ConfigServiceSetting.ConfigFiles)
                    {
                        var files = FileHelper.SearchFileWithPattern(fileSetting.FileName, SearchOption.AllDirectories, AppDomain.CurrentDomain.SetupInformation.ApplicationBase);
                        if (files != null && files.Length > 0)
                        {
                            configFiles.AddRange(files);
                        }
                    }
                    foreach (var fileName in configFiles)
                    {
                        var configSetting = ConfigHelper.CreateFromXmlFile(fileName);
                        rootSetting.Merge(configSetting);
                    }
                }
            }

            ConfigSettingInherit(rootSetting["htb.devfx"], new List <IConfigSetting>(), new List <IConfigSetting>());
            this.Settings = rootSetting;
            if (configServiceSetting != null && configServiceSetting.Debug != null && configServiceSetting.Debug.Enabled)
            {
                var outputFileName = configServiceSetting.Debug.FileName;
                if (!string.IsNullOrEmpty(outputFileName))
                {
                    outputFileName = FileHelper.GetPhysicalPath(".", outputFileName, true);
                    File.WriteAllText(outputFileName, rootSetting.ToString());
                }
            }
        }
コード例 #2
0
        private static IObjectService Setup()
        {
            IStartupSetting setting = ConfigSectionHandler.GetConfig("htb.devfx").ToSetting <StartupSetting>("startup");
            string          configServiceTypeName = null;
            string          objectServiceTypeName = null;

            if (setting != null && setting.CoreSetting != null)
            {
                if (setting.CoreSetting.ConfigServiceSetting != null)
                {
                    configServiceTypeName = setting.CoreSetting.ConfigServiceSetting.TypeName;
                }
                if (setting.CoreSetting.ObjectServiceSetting != null)
                {
                    objectServiceTypeName = setting.CoreSetting.ObjectServiceSetting.TypeName;
                }
            }

            IConfigService configServiceInstance = null;

            if (!string.IsNullOrEmpty(configServiceTypeName))
            {
                configServiceInstance = (IConfigService)TypeHelper.CreateObject(configServiceTypeName, typeof(IConfigService), false);
            }
            if (configServiceInstance == null)
            {
                configServiceInstance = Config.ConfigService.Default;
            }

            if (configServiceInstance is IConfigServiceInternal)
            {
                ((IConfigServiceInternal)configServiceInstance).Init(setting);
            }
            else if (configServiceInstance is IInitializable)
            {
                ((IInitializable)configServiceInstance).Init();
            }

            IObjectService objectServiceInstance = null;

            if (!string.IsNullOrEmpty(objectServiceTypeName))
            {
                objectServiceInstance = (IObjectService)TypeHelper.CreateObject(objectServiceTypeName, typeof(IObjectService), false);
            }
            if (objectServiceInstance == null)
            {
                objectServiceInstance = new DefaultObjectService();
            }
            if (objectServiceInstance is IObjectServiceInternal)
            {
                ((IObjectServiceInternal)objectServiceInstance).Init(configServiceInstance);
            }
            else if (objectServiceInstance is IInitializable)
            {
                ((IInitializable)objectServiceInstance).Init();
            }
            return(objectServiceInstance);
        }
コード例 #3
0
 void IInitializable <IStartupSetting> .Init(IStartupSetting startupSetting)
 {
     this.Init(startupSetting);
 }
コード例 #4
0
 protected virtual void Init(IStartupSetting startupSetting)
 {
     ThreadHelper.ThreadSafeExecute(this, () => this.Settings == null, () => this.OnInit(startupSetting));
 }
コード例 #5
0
        protected override void OnInit()
        {
            this.objectNamespaces      = new Dictionary <string, ObjectNamespace>();
            this.globalObjectNamespace = new ObjectNamespace(GlobalObjectNamespaceName);
            this.objectNamespaces.Add(GlobalObjectNamespaceName, this.globalObjectNamespace);

            this.ObjectBuilder = new ObjectBuilderInternal(this);

            ILifetimeContainer configServiceLifetime = new SingletonLifetimeContainer();

            configServiceLifetime.Init(null, this.ObjectBuilder);
            configServiceLifetime.SetObject(this.ConfigService);
            var configServiceType = typeof(IConfigService);

            this.globalObjectNamespace.TypedObjects.Add(configServiceType, configServiceLifetime);

            ILifetimeContainer objectServiceLifetime = new SingletonLifetimeContainer();

            objectServiceLifetime.Init(null, this.ObjectBuilder);
            objectServiceLifetime.SetObject(this);
            var objectServiceType = typeof(IObjectService);

            this.globalObjectNamespace.TypedObjects.Add(objectServiceType, objectServiceLifetime);

            IStartupSetting setting = this.ConfigService.ToSetting <IObjectService, StartupSetting>();

            if (setting == null || setting.CoreSetting == null || setting.CoreSetting.ObjectServiceSetting == null)
            {
                return;
            }
            var objectServiceSetting = setting.CoreSetting.ObjectServiceSetting;

            if (objectServiceSetting.Extenders != null && objectServiceSetting.Extenders.Length > 0)
            {
                foreach (var extenderSetting in objectServiceSetting.Extenders)
                {
                    if (!extenderSetting.Enabled)
                    {
                        continue;
                    }
                    var extender = (IObjectExtender <IObjectService>)TypeHelper.CreateObject(extenderSetting.TypeName, typeof(IObjectExtender <IObjectService>), false);
                    if (extender != null)
                    {
                        extender.Init(this);
                    }
                }
            }

            this.OnPreInit();
            if (objectServiceSetting.ObjectNamespace == null)
            {
                return;
            }
            var spaceSetting  = objectServiceSetting.ObjectNamespace;
            var spaceSettings = new Dictionary <ObjectNamespace, IObjectNamespaceSetting> {
                { this.globalObjectNamespace, spaceSetting }
            };

            this.InitNamespace(spaceSetting, GlobalObjectNamespaceName, spaceSettings);
            this.InitTypeAliases(spaceSettings);
            this.InitConstAliases(spaceSettings);
            this.InitObjectAliases(spaceSettings, x => {
                if (objectServiceType.IsAssignableFrom(x))
                {
                    return(objectServiceLifetime);
                }
                if (configServiceType.IsAssignableFrom(x))
                {
                    return(configServiceLifetime);
                }
                return(null);
            });
        }