【问题标题】:Multiple Database Context多数据库上下文
【发布时间】:2014-04-17 19:44:58
【问题描述】:

我正在关注这个Contoso University MVC NTier University 架构。但我不知道如何将其设置为多个数据库上下文。在我的 MVC 应用程序中,我有两个我经常访问的数据库。

  • Project.Common(这是放置 IUnitOfWork、IRepository 等通用基础架构的地方)
  • 项目.数据
  • Project.Models
  • 项目服务
  • Project2.Data
  • Project2.Models
  • Project2.Service
  • Project.Web

当我在 Global.asax 中使用 UnityContainer 时。我注册了两个 Dbfactory 和 Uow 之类的:

IUnityContainer oContainer = new UnityContainer()
// ***** PROJECT *****
 .RegisterType<IProjectDBFactory, ProjectDBFactory>(new HttpContextLifetimeManager<IProjectDBFactory>())
 .RegisterType<IUnitOfWork, ProjectUow>(new HttpContextLifetimeManager<IUnitOfWork>())
 .RegisterType<IRepoPRJTABLE, RepoPRJTABLE>(new HttpContextLifetimeManager<IRepoPRJTABLE>())
 .RegisterType<IServiceRepository<PRJTABLE>, ServicePRJTABLE>(new HttpContextLifetimeManager<IServiceRepository<PRJTABLE>>())

 // ***** PROJECT2 *****
 .RegisterType<IProject2DBFactory, Project2WebDBFactory>(new HttpContextLifetimeManager<IProject2DBFactory>())
 .RegisterType<IUnitOfWork, Project2Uow>(new HttpContextLifetimeManager<IUnitOfWork>())
 .RegisterType<IRepoPRJ2TABLE, RepoPRJ2TABLE>(new HttpContextLifetimeManager<IRepoPRJ2TABLE>())
 .RegisterType<IServiceRepository<PRJ2TABLE>, ServicePRJ2TABLE>(new HttpContextLifetimeManager<IServiceRepository<PRJ2TABLE>>())

我可以完美地查看数据。但是当我查看 ServicePRJ 时,它的 Unitofwork 上下文是 PROJECT2 的。请帮助我......我想我需要将上下文传递给单元,但我很难构建我的代码。我是使用这种架构编码的新手,是使用 unitycontainer 的新手,是 mvc 的新手。请帮我。

【问题讨论】:

    标签: c# asp.net-mvc-4 architecture unity-container n-tier-architecture


    【解决方案1】:

    您对项目 2 的 IUnitOfWork 的第二次注册将覆盖容器中的第一次注册。 您需要为各个项目制作特定的工作单元接口。

    interface IProjectUnitOfWork : IUnitOfWork {}
    interface IProject2UnitOfWork : IUnitOfWork {}
    ....
    IUnityContainer oContainer = new UnityContainer()
    // ***** PROJECT *****
     .RegisterType<IProjectDBFactory, ProjectDBFactory>(new HttpContextLifetimeManager<IProjectDBFactory>())
     .RegisterType<IProjectUnitOfWork, ProjectUow>(new HttpContextLifetimeManager<IProjectUnitOfWork >())
     .RegisterType<IRepoPRJTABLE, RepoPRJTABLE>(new HttpContextLifetimeManager<IRepoPRJTABLE>())
     .RegisterType<IServiceRepository<PRJTABLE>, ServicePRJTABLE>(new HttpContextLifetimeManager<IServiceRepository<PRJTABLE>>())
    
     // ***** PROJECT2 *****
     .RegisterType<IProject2DBFactory, Project2WebDBFactory>(new HttpContextLifetimeManager<IProject2DBFactory>())
     .RegisterType<IProject2UnitOfWork, Project2Uow>(new HttpContextLifetimeManager<IProject2UnitOfWork >())
     .RegisterType<IRepoPRJ2TABLE, RepoPRJ2TABLE>(new HttpContextLifetimeManager<IRepoPRJ2TABLE>())
     .RegisterType<IServiceRepository<PRJ2TABLE>, ServicePRJ2TABLE>(new HttpContextLifetimeManager<IServiceRepository<PRJ2TABLE>>())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2021-11-30
      • 2020-08-26
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      相关资源
      最近更新 更多