4

我正在开发一个解决方案,其中包含一个DbContext(名为CoreContext)的核心项目。此上下文包含一个实体 (Product) 以及其他几个实体,该实体引用抽象类 (ProductConstraints),为通用产品提供通用验证规则。永远不会直接使用此上下文。在同一解决方案中还有其他三个项目(Product1、Product2 和 Product3),它们继承了CoreContext(作为 ProductXContext)和ProductConstraints(作为 ProductXConstraints)类,它们实现了针对其特定产品的自定义验证规则。

还有另一个项目包含一个自定义CodeFirstMembership. 它的“用户”实体包含一个“产品”属性,用于定义用户将使用的产品。

最后,我有一个 MVC3 项目,我想根据当前用户的“产品”信息实例化适当的上下文。创建类似 a 的东西ContextFactory来接收这个产品并返回正确的DbContext. 我尝试了一些方法,但没有取得重大成功。

4

1 回答 1

3

您可以使用依赖注入来解决您的问题。如果用户只绑定一个产品,您可以存储该详细信息Session以避免往返数据库。

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 回答