IPersistenceConfigurer

IPersistenceConfigurer

我在.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/

10-11 04:19