如果我有一个带有服务的类,我希望所有派生类都可以访问(比如安全对象或存储库),那么我可能会执行以下操作:
public abstract class A
{
static ISecurity _security;
public ISecurity Security { get { return _security; } }
public static void SetSecurity(ISecurity security) { _security = security; }
}
public class Bootstrapper
{
public Bootstrapper()
{
A.SetSecurity(new Security());
}
}
似乎最近我看到到处都在回避静态属性,这是绝对要避免的。对我来说,这似乎比在我创建的每个派生类的构造函数中添加一个 ISecurity 参数更干净。鉴于我最近阅读的所有内容,我想知道:
这是一个可接受的依赖注入应用程序,还是我违反了一些可能会在以后困扰我的主要设计原则?此时我没有进行单元测试,所以如果我这样做的话,我可能会突然意识到我的问题的答案。老实说,虽然我可能不会改变我的设计,但如果有其他重要原因我应该改变它,那么我很可能会。
编辑:我第一次编写该代码时犯了几个愚蠢的错误……现在已修复。只是想我会指出这一点,以防有人碰巧注意到:)
编辑:SWeko 提出了一个很好的观点,即所有派生类都必须使用相同的实现。在我使用这种设计的情况下,该服务始终是单例的,因此它有效地执行了已经存在的需求。当然,如果不是这样,这将是一个糟糕的设计。