Asp.net mvc DI和构造函数参数计数

Asp.net mvc DI和构造函数参数计数,asp.net-mvc,dependency-injection,inversion-of-control,Asp.net Mvc,Dependency Injection,Inversion Of Control,我将依赖注入用于我的MVC分层应用程序。当我的业务逻辑类需要太多依赖项(5+接口参数)时,我面临这个问题。结果,类构造函数变得广泛而丑陋。DI模式可以吗?我可以将我的业务类拆分为不太复杂的类(参数的数量可以接受),但是控制器中的参数数量将会增加(因为它们需要更多的业务对象) 如何处理这种情况 构造函数过度注入是一种错误,因为它通常表示违反了。换句话说,如果一个类有许多依赖项,则表明它有多重责任;它做得太多了。做得太多的类很难理解、测试和维护 我认为通过拆分业务逻辑类,您走上了正确的道路。我发现在

我将依赖注入用于我的MVC分层应用程序。当我的业务逻辑类需要太多依赖项(5+接口参数)时,我面临这个问题。结果,类构造函数变得广泛而丑陋。DI模式可以吗?我可以将我的业务类拆分为不太复杂的类(参数的数量可以接受),但是控制器中的参数数量将会增加(因为它们需要更多的业务对象)


如何处理这种情况

构造函数过度注入是一种错误,因为它通常表示违反了。换句话说,如果一个类有许多依赖项,则表明它有多重责任;它做得太多了。做得太多的类很难理解、测试和维护

我认为通过拆分业务逻辑类,您走上了正确的道路。我发现在这方面非常有效的一种模式是为每个业务逻辑类提供一个(公共)方法,并让它们实现一个用例。请看一个例子

但是现在您将问题转移到了控制器上,但就像业务层中的类一样,表示层中的控制器类也是如此:如果它们有许多依赖项,那么它们可能有很多代码,并成为维护问题

但正如您拆分BL类一样,您也可以对控制器执行同样的操作。没有人说控制器应该有很多动作方法和很多代码。您可以在ASP.NET MVC中创建使用相同视图模型和相同视图的多个控制器。该视图应该放在共享文件夹中,并清楚地命名,以便MVC可以找到该视图。在使用ASP.NET MVC时,我发现这在所有情况下都不是那么令人愉快,但不要让您的表示框架支配您的设计。遵循规则;其余的都是这样


另一个选项是从控制器中提取。仔细查看控制器中的代码。您经常会看到,一组依赖项被组合使用。用使用这些依赖项的代码将它们提取到一个新类中,并将该类注入控制器的构造函数中。如果您的类太大,则可能缺少一个抽象。找到正确的抽象概念通常并不容易,而且通常需要一些时间才能找到正确的名称。您将看到我多次更改此类聚合服务的名称,将逻辑移入移出,直到感觉正确为止。不要害怕尝试这一点。

谢谢你的全面回答!