我正在.NET MVC 4中编写会话管理器类,而我却陷入了创建SqlConfiguration的困境。 这是该类的一个属性:
public static MsSqlConfiguration SqlConfig { get; set; }
所有工作完全排除了我只能从MS SQLServer管理会话的事实。 我想做这样的事情:
public static MsSqlConfiguration,SQLiteConfiguration SqlConfig { get; set; }
我知道这是不可能的,所以我不知道该怎么做。 感谢。
答案 0 :(得分:3)
您可以使用这两个属性创建一个类并使用它们。我知道它非常基本
class MyConfig
{
public static MsSqlConfiguration SqlConfig { get; set; }
public static SQLiteConfiguration SQLiteConfig { get; set; }
}
像
一样使用它们public static MyConfig SqlConfig { get; set; }
答案 1 :(得分:2)
字典怎么样?
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
(又名List<IPersistenceConfigurer>
)的通用列表,并使用 LINQ OfType<T>
扩展方法获取配置,如下所示:
dbConfigs.OfType<MsSqlConfiguration >().Single()
......或
dbConfigs.Single(config => config is MsSqlConfiguration)
另一种选择,如果您使用依赖注入和IoC容器(例如 Castle Windsor ),则使用可以提供IPersistenceConfigurer
实例的容器注册工厂任何需要它的组件。这样,您可以为IPersistenceConfigurer
服务注册不同的组件,具体取决于您运行的环境(因为我假设您在任何时候只需要一个特定的IPersistenceConfigurer
应用程序)。