【发布时间】:2021-09-20 11:07:15
【问题描述】:
在我的 ASP.NET Core Web API 中,我有几个控制器在其构造函数中接受超过 4-5 个参数,这对我来说看起来不太好。我正在考虑创建一个聚合类,其中包含我经常使用的所有单独对象。 我的意思是,例如,而不是这个:
public SomeController : Controller
{
public SomeController(
IService1 service1,
IService2 service2,
Config1 config1,
Config2 config2)
{
}
}
这样写:
// of course registered in DI services.AddSingleton<MyToolkit>()
public class MyToolkit
{
public MyToolkit(
IService1 service1,
IService2 service2,
Config1 config1,
Config2 config2)
{
...
}
public IService1 Service1 { get; }
public IService2 Service2 { get; }
public Config1 Config1 { get; }
public Config2 Config2 { get; }
}
public SomeController : Controller
{
private readonly MyToolkit _toolkit;
public SomeController(MyToolkit toolkit) { _toolkit = toolkit; }
[HttpGet]
public IActionResult GetSomething()
{
return _toolkit.Service1.GetSomething();
}
}
这种方法(MyToolkit 类)是否违反任何现代设计原则?这种方法是否被视为反模式?
【问题讨论】:
-
本书DIPP&P(我与人合着)包含关于构造函数过度注入代码气味的一整节(section 6.1)。它提供了几种解决方案,例如Facade Services refactoring、composites、domain events 和decorators。
标签: c# asp.net-core design-patterns dependency-injection