4

DbContext私は、 (という名前の)が含まれるコアプロジェクトを持つソリューションに取り組んでCoreContextいます。このコンテキストには、一般的な製品に共通の検証規則を提供する抽象クラス (ProductConstraints) を参照するエンティティ (製品) が含まれます。このコンテキストが直接使用されることはありません。特定の製品のカスタム検証ルールを実装する (ProductXContext として) クラスCoreContextと(ProductXConstraints として) クラスの両方を継承する同じソリューションに、他に 3 つのプロジェクト (Product1、Product2、および Product3) があります。ProductConstraints

custom を含む別のプロジェクトもありますCodeFirstMembership。その「ユーザー」エンティティには、ユーザーが使用する製品を定義する「製品」プロパティが含まれています。

最後に、現在のユーザーの「製品」情報に基づいて適切なコンテキストをインスタンス化する MVC3 プロジェクトがあります。ContextFactoryこの製品を受け取り、正しい を返す のようなものを作成しますDbContext。いくつかのアプローチを試みましたが、大きな成功はありませんでした。

4

1 に答える 1

3

依存性注入を使用して問題を解決できます。Sessionユーザーが 1 つの製品のみにバインドされている場合は、データベースへの往復を避けるためにその詳細を保存できます。

public class ContextFactory
{    
     public CoreContext CreateContext()
     {
         var product = HttpContext.Current.Session["Product"] as string;

         //resolve the correct context

         return context;
     }
}

その後、ファクトリを DI コンテナーに登録できます。

builder.Register(c => ContextFactory.CreateContext()).As<CoreContext>();

次に、コントローラーでコンストラクター注入を使用できます

public class MyController : Controller
{
     public MyController(CoreContext context)
     {

     }    
}
于 2012-01-03T00:47:50.880 に答える