c# - 多数据库上下文

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

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

  • Project.Common(这是放置 IUnitOfWork、IRepository 等通用基础设施的地方)
  • 项目.数据
  • 项目.模型
  • 项目服务
  • 项目2.数据
  • Project2.模型
  • 项目2.服务
  • 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 的新手。请帮我。

最佳答案

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

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>>())

关于c# - 多数据库上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372449/

相关文章:

c# - Windows API 代码包 - ShellFile 不生成 PDF 位图

c# - 如何将相对路径转换为 ​​C#/.NET 中的完全限定路径?

architecture - 使用 Code::Blocks 编译时针对不同的 CPU - 理解错误

model-view-controller - 如何为同一资源组合插件?

c# - 收到 Paypal 付款,执行 SQL 查询

asp.net-mvc-4 - 基本类型的 ASP.NET MVC 4 编辑器模板

asp.net-mvc-3 - 在 Azure 网站上使用 GData API 时出现 InvalidCredentialsException;本地调试运行正常

asp.net-mvc-4 - 为什么_Layout.cshtml默认放置在~/Views/Shared文件夹中?

architecture - 程序经理与软件架构师

c# - 在 Roslyn 项目中创建新文件夹