diff --git a/GBase/GBase.cs b/GBase/GBase.cs index e665d65..60a17d0 100644 --- a/GBase/GBase.cs +++ b/GBase/GBase.cs @@ -2,10 +2,14 @@ // Created: 2020-02-12 // Copyright(c) 2020 SimonG. All Rights Reserved. +using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Threading; using System.Threading.Tasks; +using GBase.Attributes; +using GBase.Factories; using GBase.Interfaces; using GBase.Interfaces.Settings; @@ -21,12 +25,17 @@ namespace GBase /// public const string GBASE_TABLE_FILE_EXTENSION = "gb"; //TODO: Find correct place for this const + private readonly IGBaseTableFactory _gBaseTableFactory; + /// /// The base class of the GBase database /// /// The for this - public GBase(IGBaseSettings settings) + /// Factory for the + public GBase(IGBaseSettings settings, IGBaseTableFactory gBaseTableFactory) { + _gBaseTableFactory = gBaseTableFactory; + Settings = settings; Tables = new List(); } @@ -51,11 +60,26 @@ namespace GBase /// Initialize this /// /// The name of this + /// The of the database /// A to cancel the asynchronous operation /// True if successful, false if not - public async Task Init(string name, CancellationToken cancellationToken) + public async Task Init(string name, Assembly databaseAssembly, CancellationToken cancellationToken) { Name = name; + + Type[] types = databaseAssembly.GetTypes(); + foreach (var type in types) + { + GBaseTableAttribute gBaseTableAttribute = type.GetCustomAttribute(); + if (gBaseTableAttribute == null) + continue; + + IGBaseTable gBaseTable = _gBaseTableFactory.Create(); + await gBaseTable.Init(type, type.Name, Settings.DatabasePath, cancellationToken); + + AddTable(gBaseTable); + } + return true; } diff --git a/GBase/Interfaces/IGBase.cs b/GBase/Interfaces/IGBase.cs index 4bc0578..614211a 100644 --- a/GBase/Interfaces/IGBase.cs +++ b/GBase/Interfaces/IGBase.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Reflection; using System.Threading; using System.Threading.Tasks; using GBase.Interfaces.Settings; @@ -35,9 +36,10 @@ namespace GBase.Interfaces /// Initialize this /// /// The name of this + /// The of the database /// A to cancel the asynchronous operation /// True if successful, false if not - Task Init(string name, CancellationToken cancellationToken); + Task Init(string name, Assembly databaseAssembly, CancellationToken cancellationToken); /// /// Add a given to this