1

我正在.NET MVC 4 中编写会话管理器类,但在创建 SqlConfiguration 时遇到了困难。这是该类的属性之一:

public static MsSqlConfiguration SqlConfig { get; set; }

除了我只能从 MS SQLServer 管理会话这一事实之外,所有工作都完美无缺。我想做这样的事情:

public static MsSqlConfiguration,SQLiteConfiguration SqlConfig { get; set; }

而且我知道这是不可能的,所以我不知道该怎么做。谢谢。

4

2 回答 2

3

您可以使用这两个属性创建一个类并使用它们。我知道它非常基本

class MyConfig 
{   
    public static MsSqlConfiguration SqlConfig { get; set; }

    public static SQLiteConfiguration SQLiteConfig { get; set; }
}

像这样使用它们

public static MyConfig SqlConfig { get; set; }
于 2013-08-14T08:01:42.837 回答
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(aka ) 的通用列表并使用LINQList<IPersistenceConfigurer>扩展方法获取配置,如下所示: OfType<T>

dbConfigs.OfType<MsSqlConfiguration >().Single()

...或者

dbConfigs.Single(config => config is MsSqlConfiguration)

另一种选择是,如果您使用依赖注入和 IoC 容器(例如Castle Windsor),则向容器注册一个工厂,该容器可以为IPersistenceConfigurer任何需要它的组件提供实例。这样,您可以IPersistenceConfigurer根据运行的环境为服务注册不同的组件(因为我假设您IPersistenceConfigurer在任何时候都只需要一个特定的应用程序)。

于 2013-08-14T08:25:13.363 回答