Database Independence–part 070 of n – loading and retrieving

So now I can choose between Postgresql, Sqlite, SqlServer and MongoDb . Next phase is when the app administrator chooses a database- and you expect the app to start with this selection of database provider. So 2 new functions are needed, in which the provider name, connection string and database name are saved

public static async Task<bool> SaveChosenPlugin(IDainEF_Data dainEF, string? pluginsDirectory= null,IDainEF_Data_CR? cr= null)
{
    cr ??= new DainEF_Data_CR(pluginsDirectory);
    return await cr.Save(dainEF);
}

public static async Task<(IEFCore_DatabasePlugin_10?,IDainEF_Data?)> RetrieveLatestChosenPlugin(string? pluginsDirectory=null, IDainEF_Data_CR? cr = null)
{
    pluginsDirectory ??= Path.Combine(AppContext.BaseDirectory, "plugins");
    cr ??= new DainEF_Data_CR(pluginsDirectory);
    var data= await cr.Retrieve();
    if (data == null) return (null,null);
    
    var discoveredAssemblies = EfCorePluginLoader_10.DiscoverPluginAssemblies(pluginsDirectory);
    foreach (var assembly in discoveredAssemblies)
    {
        var loaded = LoadFromAssembly(assembly, isUnloadable: false);
        foreach (var plugin in loaded)
        {
            if (string.Equals(plugin.ProviderName, data.PluginName)) return (plugin,data);
        }
    }
    return (null,data);
}

And there is a test for that

[Fact]
public async Task TestLoad10_SaveAndRetrievePlugin()
{
    await TestLoad10();

    DainEF_Data data =new DainEF_Data();
    data.PluginName = "MongoDB";
    data.ConnectionString = "fake";
    data.DatabaseName= "fakeAgain";

    var b = await EfCorePluginLoader_10.SaveChosenPlugin(data);
    Assert.True(b,"must have saved");
    var (plugin,dataDain) = await EfCorePluginLoader_10.RetrieveLatestChosenPlugin();
    Assert.NotNull(plugin);
    Assert.NotNull(dataDain);
    Assert.Equal(plugin.ProviderName, data.PluginName);
    Assert.Equal(dataDain.PluginName, data.PluginName);
    Assert.Equal(dataDain.ConnectionString, data.ConnectionString);
    Assert.Equal(dataDain.DatabaseName, data.DatabaseName);


}

Posted

in

by

Tags: