【发布时间】:2014-10-23 08:41:56
【问题描述】:
我正在开发一个 MVC 应用程序,我正在使用 Unity for IoC。 My Application 基本上由 UI 层、服务层和存储库层组成。
我的典型控制器是:
public class TestController : Controller
{
private ITestService testServ;
public TestController(ITestService _testServ)
{
testServ= _testServ;
}
public ActionResult Index()
{
testServ.DoSomething();
return View();
}
}
没有什么特别的,我的每个控制器都注入了一个服务对象。因此,我的服务层对象执行复杂的业务规则,聚合来自许多不同存储库的信息。通过使用 IoC,我发现我的构造函数看起来过于复杂,但由于该服务需要访问许多存储库,因此我看不到任何解决方法。
我的服务层中的一个典型类如下所示:
public class TestService : ITestService
{
private ITransactionRepository transRepo;
private IAccountRepository accountRepo;
private ISystemsRepository sysRepo;
private IScheduleRepository schRepo;
private IProfileRepository profileRepo;
public TestService(ITransactionRepository _transRepo;
IAccountRepository _accountRepo;
ISystemsRepository _sysRepo;
IScheduleRepository _schRepo;
IProfileRepository _profileRepo)
{
transRepo = _transRepo;
accountRepo = _accountRepo;
sysRepo = _sysRepo;
schRepo = _schRepo;
profileRepo = _profileRepo;
}
public DoSomething()
{
//Implement Business Logix
}
}
我的几个服务层对象需要 10 个或更多存储库。我的存储库使用 Entity Framework,其中每个存储库类在底层数据存储中公开一个表。
我正在寻找一些关于在上述情况下的最佳实践的建议。
【问题讨论】:
-
正在寻找有关 IoC 或 DI 容器(Unity 是后者)的建议?
-
顺便说一句:如果您的“服务”有很多依赖项,它可能会太多(SOLID 中的S)-也许您可以将服务本身拆分为真正的职责-很可能您也可以为结果提供比 Service 更好的名称;)
标签: c# asp.net-mvc design-patterns inversion-of-control