. net MVC控制器与多个存储库和服务

本文关键字:存储 服务 MVC 控制器 net | 更新日期: 2023-09-27 18:07:56

看看我的控制器(我使用依赖注入来管理依赖):

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext)
{
    _roleRepository = roleRepository;
    _siteRepository = siteRepository;
    _userRepository = userRepository;
    _dbContext = dbContext;
}

有很多依赖的类是一个代码气味?对吧?

但是,在我的例子中,我需要在一个Role中关联UsersSites,然后我需要这些依赖关系来做这个关联。

邮件列表上的一些人告诉我,有太多的依赖是一个信号,可能是错误的。但我没有别的办法。我分门别类,在那种情况下有什么事我不知道该怎么处理?有什么问题吗?

更新:

我需要Repositories和DbContext,因为DbContext是我的UnitOfWork, Repositories不保存。

这个例子是一个简单的CRUD,具有一些其他功能,如在视图中与GRID关联。

更新2:

我正在使用一个架构,其中我的UI层是MVC

. net MVC控制器与多个存储库和服务

我不认为这是一件坏事,因为你使用一个好的DI框架来管理依赖关系(也就是说,不要使用穷人的DI)。这样,你显式地说控制器需要所有这些东西,因为它需要。(注意,在应用程序的许多其他部分,这可能不是一个有效的参数-控制器的特殊之处在于它是你控制和指导程序流的地方,所以有一个自然的解释,为什么它需要看到应用程序的许多部分…)

但是,如果您真的想在这个特定的情况下限制依赖项的数量,那么创建一个MembershipService是有意义的,它完成与UsersSitesRoles有关的所有工作。然后,它将依赖于这三个存储库,而您的控制器将只依赖于成员服务。


在响应你的更新:你可以注册工作单元(即db上下文)作为"每个web请求"的单例-这是可能的城堡温莎和许多其他DI框架。然后你可以让你的存储库依赖它来做所有的更改,让控制器依赖它来保存,它们都将得到由DI框架传递给它们的相同实例。