属性类型有两个类

时间:2013-08-14 07:55:06

标签: c# sql-server asp.net-mvc fluent-nhibernate

我正在.NET MVC 4中编写会话管理器类,而我却陷入了创建SqlConfiguration的困境。 这是该类的一个属性:

public static MsSqlConfiguration SqlConfig { get; set; }

所有工作完全排除了我只能从MS SQLServer管理会话的事实。 我想做这样的事情:

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

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

2 个答案:

答案 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应用程序)。