C# 两个类的属性类型

C# 两个类的属性类型,c#,sql-server,asp.net-mvc,fluent-nhibernate,C#,Sql Server,Asp.net Mvc,Fluent Nhibernate,我正在用.NETMVC4编写会话管理器类,在创建SqlConfiguration时遇到了困难。 以下是该类中的一个属性: public static MsSqlConfiguration SqlConfig { get; set; } 除了我只能从MS SQLServer管理会话这一事实之外,所有这些都工作得很好。 我想这样做: public static MsSqlConfiguration,SQLiteConfiguration SqlConfig { get; set; } 我知道这是

我正在用.NETMVC4编写会话管理器类,在创建SqlConfiguration时遇到了困难。 以下是该类中的一个属性:

public static MsSqlConfiguration SqlConfig { get; set; }
除了我只能从MS SQLServer管理会话这一事实之外,所有这些都工作得很好。 我想这样做:

public static MsSqlConfiguration,SQLiteConfiguration SqlConfig { get; set; }
我知道这是不可能的,所以我不知道该怎么办。
谢谢。

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

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

    public static SQLiteConfiguration SQLiteConfig { get; set; }
}
像这样使用它们

public static MyConfig SqlConfig { get; set; }

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

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

    public static SQLiteConfiguration SQLiteConfig { get; set; }
}
像这样使用它们

public static MyConfig 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..
        });
…或

dbConfigs.Single(config => config is MsSqlConfiguration)

另一个选项是,如果您使用依赖项注入和IoC容器(如),则向容器注册一个工厂,该容器可以向任何需要它的组件提供
IPersistenceConfigurator
的实例。通过这种方式,您可以为
ipersistenceconfigurator
服务注册不同的组件,具体取决于您运行的环境(因为我假设您在任何时候都只需要一个特定的
ipersistenceconfigurator

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..
        });
…或

dbConfigs.Single(config => config is MsSqlConfiguration)


另一个选项是,如果您使用依赖项注入和IoC容器(如),则向容器注册一个工厂,该容器可以向任何需要它的组件提供
IPersistenceConfigurator
的实例。通过这种方式,您可以为
ipersistenceconfig
服务注册不同的组件,具体取决于您运行的环境(因为我假设您在任何时候都只需要应用程序的一个特定
ipersistenceconfig

您想要创建一个抽象<代码>IDatabaseConfiguration。您还可以在会话管理器和持久性机制之间添加一层间接层。@SamLeach您能给我举个例子吗?您会只使用其中一个吗?或者两者同时出现?请不要用“SQL”标记有关Microsoft SQL Server的问题,用“MVC”标记有关ASP.NET MVC框架的问题。您要创建一个抽象<代码>IDatabaseConfiguration。您还可以在会话管理器和持久性机制之间添加一层间接层。@SamLeach您能给我举个例子吗?您会只使用其中一个吗?或者两者同时出现?请不要用“SQL”标记关于Microsoft SQL Server的问题,用“MVC”标记关于ASP.NET MVC framework的问题。但是如果我想说我需要检查哪些配置是空的,哪些是空的。在代码中的某个点上,你需要区分这两者,对吗?那么为什么不在这一点上呢?但是如果我想说我需要检查什么配置是空的,什么是否。在代码中的某个点上,你需要区分这两者,对吗?那么为什么现在不呢?我没有任何IDbConfig类/接口。我用的是流利的NHibernate。@RafaelZilberman你确定吗?这是什么?是的,它可以工作,但现在它仍然只适用于MS SQLSERVER。我如何让它得到第一个非空的配置?@RussCam是的,没问题,你是对的。我只是想指出,OP可能需要提高他/她的技能,以利用您的编辑。无论如何,这是事实,对未来的读者来说应该是有用的;)再次感谢你。@Russcan啊,我喜欢你关于温莎城堡的建议。它也是我选择的容器。我没有任何IDbConfig类/接口。我用的是流利的NHibernate。@RafaelZilberman你确定吗?这是什么?是的,它可以工作,但现在它仍然只适用于MS SQLSERVER。我如何让它得到第一个非空的配置?@RussCam是的,没问题,你是对的。我只是想指出,OP可能需要提高他/她的技能,以利用您的编辑。无论如何,这是事实,对未来的读者来说应该是有用的;)再次感谢你。@Russcan啊,我喜欢你关于温莎城堡的建议。这也是我选择的容器。