2011-02-18 1 views
1

SQL CE 4.0ファイルに直接接続されたEntity FrameworkコードファーストDbContextインスタンスを作成するための小さなテスト機能を作成しましたが、実際にはグローバル状態アプローチが嫌いです。 DbDatabase静的プロパティを使用せずにこれを行うより良い方法はありませんか?グローバル状態なしのEntity Frameworkの使用

using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.Database; 
using System.Data.SqlServerCe; 

public class SqlCeDb 
{ 
    public static T Instance<T>() where T: DbContext, new() 
    { 
     DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 
     DbDatabase.SetInitializer<T>(new DropCreateDatabaseAlways<T>()); 
     return new T(); 
    } 
} 

答えて

2

依存性注入は、多くの人々がやっていることです。 DbContextに依存するクラス(つまり、コンストラクタ引数または依存関係として装飾されたプロパティ)を作成し、IoC(Inversion of Control)コンテナを使用してクラスを作成します。私が扱ったすべてのIoCコンテナには、(毎回新しいインスタンスを作成するのではなく)1つのインスタンスを登録する方法があります。

人気のIoCコンテナ:

  • のStructureMap
  • ユニティ
  • Ninject

があり、他にはありますが、これらは私が最も頻繁に使用される参照のものです。

+0

入手しました。私が拡張しようとしているDbContextには、DbConnectionを受け入れるコンストラクタがあり、それが多かれ少なかれ問題を解決することがわかります。 –

関連する問題