我刚刚为其他人提出了以下模式。我已经使用过它几次,当时我想要注入(inject)依赖项进行测试,但仍然希望这个后门(在某种程度上)对外人来说是不可见的。因此,空的公共(public) ctor 和内部 ctor 带有参数:
public class ClassThatUseInjection
{
private readonly SomeClass _injectedClass;
public ClassThatUseInjection(): this(new SomeClass()) {}
internal ClassThatUseInjection(SomeClass injectedClass)
{
_injectedClass = injectedClass;
}
}
public class SomeClass
{
public object SomeProperty { get; set; }
}
我的想法是,由于空 ctor 除了转发一个新实例之外什么也不做,所以我的罪行并不算太严重。你怎么认为?是不是太臭了?
问候, 莫滕
最佳答案
我觉得还可以。事实上,您注入(inject)类所做的就是依赖注入(inject)和开闭原则的实际运用。
我什至认为将内部 Actor 变成公共(public) Actor 没有什么坏处。
我的问题始终是,我不想强迫其他人创建注入(inject)类的实例,因此是默认的 ctor。但如果他们想创建一个实例,他们可以继续这样做。
相关说明:恕我直言,您应该使用接口(interface)而不是类,否则,我认为首先传递该类没有太多优势......
关于c# - TDD/注入(inject)和信息隐藏之间的斗争 - 可能的妥协?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093182/