我正在使用实体框架构建一个 MVC3 应用程序。在应用程序中,我的控制器与服务层通信。其中一个控制器是TournamentController
使用TournamentService
. CreateTournament
该服务有一些标准方法,例如UpdateTournament
等。
当我想插入一个新的锦标赛时,我希望视图有一个可以组织锦标赛的可能运动的下拉列表。因此,在TournamentController's
Create
方法中,我填写了ViewBag.Sports
一份可能的运动列表。现在获取我使用的运动列表_tournamentService.GetAllSports()
。在这种GetAllSports()
方法中,TournamentService
我想创建一个实例,SportService
以便我可以将问题“转发”到正确的服务。
所有服务都在构造函数中使用依赖注入来注入自己的存储库,如下所示:
private ITournamentRepository _repo;
public TournamentService(ITournamentRepository repo) {
_repo = repo;
}
我的GetAllSports()
方法是TournamentService
这样的:
public IEnumerable<Sport> GetAllSports() {
ISportService sportService = new SportService();
return sportService.GetSports();
}
问题是,通过调用它,new SportService()
它希望我ISportRepository
在TournamentService
ninject 创建TournamentRepository
. 现在我可以执行以下操作:
public IEnumerable<Sport> GetAllSports() {
ISportService sportService = new SportService(new SportRepository());
return sportService.GetSports();
}
但问题是每个存储库都需要一个 IContext,它通常也由 ninject 处理。此外,我不希望实例化两个单独的上下文。
我发现自己的一个可能的解决方案是这样做:
private ITournamentRepository _repo;
private ISportService _sportService;
public TournamentService(ITournamentRepository repo, ISportService sportService) {
_repo = repo;
_sportService = sportService
}
但是我的TournamentService
类中只有一种方法会实际使用,_sportService
所以我认为将其作为类属性有点过分。