1

.NET MVC 4 でセッション マネージャー クラスを作成していますが、SqlConfiguration を作成する時点で行き詰まりました。クラスのプロパティの 1 つを次に示します。

public static MsSqlConfiguration SqlConfig { get; set; }

MS SQLServer からのみセッションを管理できるという事実を除いて、すべてが完全に機能しています。私はこのようなことをしたい:

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

そして、それが不可能であることを知っているので、どうすればよいかわかりません。ありがとう。

4

2 に答える 2

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(別名) の汎用リストを使用し、次のようにLINQ拡張メソッドList<IPersistenceConfigurer>を使用して構成を取得することです。 OfType<T>

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

...また

dbConfigs.Single(config => config is MsSqlConfiguration)

依存性注入を使用していて、 Castle Windsorなどの IoC コンテナーを使用している場合の別のオプションは、IPersistenceConfigurerそれを必要とするコンポーネントにのインスタンスを提供できるコンテナーにファクトリを登録することです。このようにして、実行している環境に応じて、サービスにさまざまなコンポーネントを登録できます(一度に必要なのはアプリケーションにIPersistenceConfigurer特定の 1 つだけであると想定しているため)。IPersistenceConfigurer

于 2013-08-14T08:25:13.363 に答える