コード例 #1
0
        public static IAssetManagerApi CreateApiFromSettings(AssetManagerSettings settings)
        {
            settings.Validate();

            IList <IDatabaseConfig> dbConfigs = LoadDataBase(settings);

            return(new AssetManagerApi(dbConfigs));
        }
コード例 #2
0
        // ---------------- Functions ----------------

        /// <summary>
        /// Loads the given XML file and overwrites the given settings
        /// config with the settings specified in the XML file.
        /// </summary>
        public static void LoadFromXml(this AssetManagerSettings settings, string xmlFilePath)
        {
            XmlDocument doc = new XmlDocument();

            doc.Load(xmlFilePath);

            LoadFromXml(settings, doc);
        }
コード例 #3
0
        public static IAssetManagerApi CreateApiFromConfig(string configDirectory)
        {
            AssetManagerSettings settings = new AssetManagerSettings
            {
                AssetManagerSettingsDirectory = configDirectory
            };

            settings.LoadFromXml(Path.Combine(configDirectory, ConfigFileName));

            return(CreateApiFromSettings(settings));
        }
コード例 #4
0
        private static IList <IDatabaseConfig> LoadDataBase(AssetManagerSettings settings)
        {
            // Load the assembly that contains the database information.
            Assembly assembly = Assembly.LoadFrom(settings.DatabaseAssemblyPath);

            DatabaseConfigLoaderAttribute attr = assembly.GetCustomAttribute <DatabaseConfigLoaderAttribute>();

            if (attr == null)
            {
                throw new InvalidOperationException(
                          "Loaded assembly " + settings.DatabaseAssemblyPath + " does not define " + nameof(DatabaseConfigLoaderAttribute)
                          );
            }

            object dbLoader = Activator.CreateInstance(attr.DatabaseConfigLoaderType);
            IDatabaseConfigLoader loader = dbLoader as IDatabaseConfigLoader;

            if (loader == null)
            {
                throw new InvalidOperationException(
                          "Class tagged as " + nameof(DatabaseConfigLoaderAttribute) + " does not implement " + nameof(IDatabaseConfigLoader)
                          );
            }

            IList <IDatabaseConfig> databaseConfigs = loader.Load(settings);

            foreach (IDatabaseConfig databaseConfig in databaseConfigs)
            {
                databaseConfig.Validate();
            }

            foreach (IDatabaseConfig databaseConfig in databaseConfigs)
            {
                IEnumerable <Guid> ids = databaseConfigs.Select(d => d.DatabaseId).Where(d => d.Equals(databaseConfig.DatabaseId));
                if (ids.Count() != 1)
                {
                    throw new ValidationException("More than one database has ID " + databaseConfig.DatabaseId);
                }
            }

            return(databaseConfigs);
        }
コード例 #5
0
        /// <summary>
        /// Overwrites the given settings
        /// config with the settings specified in the passed in XML document.
        /// </summary>
        public static void LoadFromXml(this AssetManagerSettings settings, XmlDocument doc)
        {
            XmlNode rootNode = doc.DocumentElement;

            if (rootNode.Name != SettingsXmlElementName)
            {
                throw new XmlException(
                          "Root XML node should be named \"" + SettingsXmlElementName + "\".  Got: " + rootNode.Name
                          );
            }

            foreach (XmlNode childNode in rootNode.ChildNodes)
            {
                switch (childNode.Name.ToLower())
                {
                case "databaseassembly":
                    settings.DatabaseAssemblyPath = childNode.InnerText;
                    break;
                }
            }
        }