我正在设置一个 asp.Net Mvc 4 应用程序并希望使用洋葱架构模式对其进行配置。过去我使用过这样的工作单元模式
public class UnitOfWork : IUnitOfWork, IDisposable
{
private IRepository<CallModel> _callRepo;
private IRepository<UserModel> _userRepo;
public IRepository<CallModel> CallRepo
{
get
{
if (_callRepo == null)
{
_callRepo = new Repository<CallModel>();
}
return _callRepo;
}
}
public IRepository<UserModel> UserRepo
{
get
{
if (_userRepo == null)
{
_userRepo = new Repository<UserModel>();
}
return _userRepo;
}
}
}
然后,我会将 UnitOfWork 类的实例传递给 Controller 以执行类似这样的简单 CRUD 操作。
public class QuestionsController : Controller
{
private IUnitOfWork _unitOfWork;
[Inject]
public QuestionsController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
我已将应用程序分成三个项目。
- 核
- 基础设施
- 网络
我在 Core 项目中有我的所有接口,在 Infrastructure 项目中有 IRepository 接口的实现。如果我将 UnitOfWork 类放在核心项目中,那么因为它在基础设施项目中需要一个新的存储库,所以我正在创建从核心到基础设施的依赖关系。如果我将它包含在基础架构中,那么 Web 项目(具有控制器)将依赖于基础架构,整个解决方案最终看起来不像洋葱,而更像意大利面条。