我在.NET MVC 4中编写会话管理器类,但在创建SqlConfiguration时被卡住了。
这是该类的属性之一:
public static MsSqlConfiguration SqlConfig { get; set; }
除了我只能从MS SQLServer管理会话这一事实以外,所有其他功能都可以正常运行。
我想做这样的事情:
public static MsSqlConfiguration,SQLiteConfiguration SqlConfig { get; set; }
而且我知道不可能,所以我不知道该怎么办。
谢谢。
最佳答案
字典呢?
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
)。关于c# - 两类属性(property)类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18226088/