我是 MVC3 应用程序开发的新手,目前,我们需要以下应用程序技术作为要求
- MVC3 框架
- IOC 框架 – Autofac 动态管理对象创建
- 起订量 – 单元测试
- 实体框架
- 模型类的存储库和工作单元模式
我已经阅读了许多文章来探索关于上述几点的基本思想,但我仍然对“存储库和工作单元模式”感到有些困惑。基本上我所理解的工作单元是一种模式,它将与存储库模式一起遵循,以便在所有存储库对象之间共享单个数据库上下文,所以这是我的设计:
IUnitOfWork.cs
public interface IUnitOfWork : IDisposable
{
IPermitRepository Permit_Repository{ get; }
IRebateRepository Rebate_Repository { get; }
IBuildingTypeRepository BuildingType_Repository { get; }
IEEProjectRepository EEProject_Repository { get; }
IRebateLookupRepository RebateLookup_Repository { get; }
IEEProjectTypeRepository EEProjectType_Repository { get; }
void Save();
}
UnitOfWork.cs
public class UnitOfWork : IUnitOfWork
{
#region Private Members
private readonly CEEPMSEntities context = new CEEPMSEntities();
private IPermitRepository permit_Repository;
private IRebateRepository rebate_Repository;
private IBuildingTypeRepository buildingType_Repository;
private IEEProjectRepository eeProject_Repository;
private IRebateLookupRepository rebateLookup_Repository;
private IEEProjectTypeRepository eeProjectType_Repository;
#endregion
#region IUnitOfWork Implemenation
public IPermitRepository Permit_Repository
{
get
{
if (this.permit_Repository == null)
{
this.permit_Repository = new PermitRepository(context);
}
return permit_Repository;
}
}
public IRebateRepository Rebate_Repository
{
get
{
if (this.rebate_Repository == null)
{
this.rebate_Repository = new RebateRepository(context);
}
return rebate_Repository;
}
}
}
许可存储库 .cs
public class PermitRepository : IPermitRepository
{
#region Private Members
private CEEPMSEntities objectContext = null;
private IObjectSet<Permit> objectSet = null;
#endregion
#region Constructors
public PermitRepository()
{
}
public PermitRepository(CEEPMSEntities _objectContext)
{
this.objectContext = _objectContext;
this.objectSet = objectContext.CreateObjectSet<Permit>();
}
#endregion
public IEnumerable<RebateViewModel> GetRebatesByPermitId(int _permitId)
{
// need to implment
}
}
许可控制器 .cs
public class PermitController : Controller
{
#region Private Members
IUnitOfWork CEEPMSContext = null;
#endregion
#region Constructors
public PermitController(IUnitOfWork _CEEPMSContext)
{
if (_CEEPMSContext == null)
{
throw new ArgumentNullException("Object can not be null");
}
CEEPMSContext = _CEEPMSContext;
}
#endregion
}
所以在这里我想知道如何使用相同的模式生成一个新的存储库,例如“TestRepository.cs”,我可以在其中创建多个存储库对象,例如
RebateRepository rebateRepo = new RebateRepository ()
AddressRepository addressRepo = new AddressRepository()
因为,无论我想创建什么 Repository 对象,我首先需要一个 UnitOfWork 对象,如 PermitController 类中所实现的那样。因此,如果我在每个单独的 Repository 类中遵循相同的做法,这将再次打破工作单元的原则并创建对象上下文的多个实例。
因此,任何想法或建议都将受到高度赞赏。
谢谢