Inside Mendz.Data's DataSettings and DataSettingOptions

The rational behind Mendz.Data's DataSettings and DataSettingOptions is simple: provide an easy way to get data settings, like connection strings, anywhere during the application's runtime. Note that .Net Core 2.0's configuration and dependency injection features make this possible. DataSettings and DataSettingOptions provide an alternative.

DataSettings is basically a POCO model for an appsettings.json section named DataSettings.

{
    "DataSettings": {
        "ConnectionStrings": {
            "EntityFrameworkConnectionString" : "connection string for EF",
            "SqlServerConnectionString" : "connection string to Sql Server",
            "SqlServerExpressConnectionString" : "connection string to (LocalDB)",
            "OracleConnectionString" : "connection string to Oracle",
            "MongoDBClient" : "MongoDB client specification",
            "MongoDBContext" : "MongoDB context specification"
        }
    }
}

DataSettingOptions provide the "magic". As a static class, once initialized, it is available anywhere in the application's runtime, including inside the class libraries referenced by the application.

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
            DataSettingOptions.Initialize(
                Configuration.GetSection("DataSettings").Get<DataSettings>());
        }

This code shows an example of how to initialize DataSettingOptions. Where ever you'll need an entry, you can simply do the following:

    DataSettingOptions.ConnectionStrings["<connection string name>"]

For example, in order to configure an Entity Framework DbContext instance, you can override OnConfiguring as follows:

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseSqlServer(DataSettingOptions
                .ConnectionStrings["EntityFrameworkConnectionString"]);
    }

This approach can remove the need for the DbContext instance to be registered in the application's Startup.ConfigureServices -- usually done via call to IServiceCollection.AddDbContext(). In fact, it can also remove the need for the application to reference the DbContext instance's assembly/class library, thus shielding the application from being bound to specific data contexts.

DataSettings and DataSettingOptions provide an alternative way to expose data settings to anywhere in your application's runtime, even in referenced class libraries, with the assumption that DataSettings and DataSettingOptions are initialized at application startup. This makes it easy, for example, to create a semi-self-initializing data context instance in its own assembly/class library. Doing so also makes the context easily compatible with repositories derived from Mendz.Data.Common.DbRepositoryBase.

Use Mendz.Data to code your data access capabilities.

Comments