首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心依赖注入单个聚合类而不是多个单独的构造函数注入

ASP.NET核心依赖注入单个聚合类而不是多个单独的构造函数注入
EN

Stack Overflow用户
提问于 2021-07-10 12:35:55
回答 1查看 328关注 0票数 1

在我的ASP.NET核心Web中,我有几个控制器,它们在构造函数中接受4-5个以上的参数,这在我看来不太好。我正在考虑创建一个聚合类,其中包含我经常使用的所有单独的对象。我的意思是,例如,代替这个:

代码语言:javascript
复制
public SomeController : Controller
{
    public SomeController(
        IService1 service1,
        IService2 service2,
        Config1 config1,
        Config2 config2)
    {
    }
}

要写这样的东西:

代码语言:javascript
复制
// 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类)是否违反了现代设计原则?这种方法被认为是反模式的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-10 12:57:47

首先,检查是否在控制器级别确实需要所有这些依赖项。

拥有许多依赖项通常表明subject类最有可能做太多的事情(SRP违规)。

如果注入到聚合中的依赖项只是作为属性公开,那么控制器和聚合对于它显式地执行其功能所需要的内容是不诚实的。(明确的依赖原则)

如果在控制器中出现了使用这些依赖项的功能,并且实际上应该在它自己的类中,那么将该功能及其依赖项抽象出来。(关注点分离- SoC)

根据提供的示例,您当前的方法只是在路上踢罐子,可以看作是一种代码气味。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68327770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档