想象一下,在Global.asax.cs文件中,我将实例类作为私有字段.我们这样说: private MyClass _myClass = new MyClass(); 我在Global上有一个名为GetMyClass()的静态方法,它获取当前的HttpApplication并返回该实例
private MyClass _myClass = new MyClass();
我在Global上有一个名为GetMyClass()的静态方法,它获取当前的HttpApplication并返回该实例.
public static MyClass GetMyClass() { return ((Global)HttpContext.Current.ApplicationInstance)._myClass; }
因此,我可以通过调用Global.GetMyClass()来获取当前请求httpapplication上的实例.
请记住,有多个(全局)HttpApplication.每个请求都有一个HttpApplication,它们是汇集/共享的,所以在最真实的意义上它不是真正的singleton.但它确实遵循了一定程度的模式.
所以问到这个问题,你至少会考虑这个单身模式吗?
你会说它不应该被使用吗?你会不鼓励使用它吗?你会说这是一个可能不好的做法,就像一个真正的单身人士.
您能否看到此类使用场景可能出现的任何问题?
或者你会说这不是一个真正的单身人士,所以没关系,也不错.你会推荐这个作为半准单身人士,每个请求需要一个实例吗?如果不是你会使用/给出什么其他模式/建议?
你有没有用过这样的东西?
我在过去的项目中使用了这个,但我不确定这是否应该让我远离.我过去从未遇到过任何问题.
请告诉我你对此的看法和意见.
我不是在问单身人士是什么.我认为在使用不当时会出现单身不良行为,这在很多情况下都是如此.那是我.但是,这不是我想要讨论的内容.我试着讨论我给出的这个场景.
无论这是否符合Singleton的切割模式,它仍然遇到与Singleton相同的问题:>它是一个静态的,具体的引用,不能替代单独的行为或在测试期间存根/模拟>您不能对此进行子类化并保留此行为,因此很容易绕过此示例的单例性质