gpt4 book ai didi

c# - 依赖注入(inject)和内部辅助类

转载 作者:行者123 更新时间:2023-12-04 23:14:53 25 4
gpt4 key购买 nike

我使用 CaSTLe Windsor,但我想这适用于所有 DI 容器......

我经常发现自己创建了内部帮助类并将它们注入(inject)到其他类中。 (实际上 Windsor 不支持内部 ctrs,所以我通常最终将帮助程序类公开,这是我的第一个“代码味道”)。

助手类可能有许多自己的依赖项,这些类型已经在 Windsor 中注册,因此(对我来说)向 Windsor 注册助手类也是有意义的,因此我可以将它注入(inject)到需要它的类中。例如。

public MyService : IService
{
public MyService(MyHelper helper, other dependencies...)
{
}
}

在阅读了几篇文章后,我开始怀疑这是否是“滥用”温莎,或者只是通常糟糕的代码设计。如果是这种情况,我应该如何处理助手类?

最佳答案

I often find myself creating internal helper classes and injecting these into other classes.



这是一种常见的重构技术,称为 Facade Services :

Facade Service hides the aggregate behavior behind a new abstraction.



至于您关于内部类(class)的问题:

making the helper classes public, which is my first "code smell").



一点也不。公共(public)课没有什么臭的。如果您遵循“程序到接口(interface)”规则,那么如果实现是公开的,则没有问题。这简化了测试,因为单元测试将直接依赖于类。

长话短说,您并没有滥用 DI 或 DI 容器。如果您将行为封装在帮助程序类中,那么您正在做正确的事情。然而,困难的是找出封装行为的最佳方式是从业务角度来看有意义的方式。但是在这样做的同时,它可能会引导您进入新的内部和新的业务概念。

关于c# - 依赖注入(inject)和内部辅助类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45208707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com