字典呢?
public static IReadOnlyDictionary<string, IPersistenceConfigurer> DbConfigurations =
new ReadOnlyDictionary<string, IPersistenceConfigurer>(
new Dictionary<string, IPersistenceConfigurer>
{
{ "azure", MsSqlConfiguration.MsSql2008
.ConnectionString("ConnectionString")
.Dialect<MsSqlAzure2008Dialect>()
.Driver<SqlAzureClientDriver>() },
{ "mssql", MsSqlConfiguration.MsSql2008
.ConnectionString("ConnectionString")
.Dialect<MsSql2008Dialect>() },
{ "sqlite", SQLiteConfiguration.Standard
.InMemory() },
// etc..
});
IPersistenceConfigurer
是任何数据库配置都必须实现的接口。
由于它是字典,因此您始终可以通过调用来检查数据库配置是否存在DbConfigurations.ContainsKey("mssql")
。
另一种选择是使用IPersistenceConfigurer
(aka ) 的通用列表并使用LINQList<IPersistenceConfigurer>
扩展方法获取配置,如下所示: OfType<T>
dbConfigs.OfType<MsSqlConfiguration >().Single()
...或者
dbConfigs.Single(config => config is MsSqlConfiguration)
另一种选择是,如果您使用依赖注入和 IoC 容器(例如Castle Windsor),则向容器注册一个工厂,该容器可以为IPersistenceConfigurer
任何需要它的组件提供实例。这样,您可以IPersistenceConfigurer
根据运行的环境为服务注册不同的组件(因为我假设您IPersistenceConfigurer
在任何时候都只需要一个特定的应用程序)。