C# 两个类的属性类型
我正在用.NETMVC4编写会话管理器类,在创建SqlConfiguration时遇到了困难。 以下是该类中的一个属性: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; } 我知道这是
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啊,我喜欢你关于温莎城堡的建议。这也是我选择的容器。