我正在关注这个 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/