当前位置 : 主页 > 网络编程 > ASP >

asp.net – 你会认为这是一个单身/单身模式吗?

来源:互联网 收集:自由互联 发布时间:2021-06-24
想象一下,在Global.asax.cs文件中,我将实例类作为私有字段.我们这样说: private MyClass _myClass = new MyClass(); 我在Global上有一个名为GetMyClass()的静态方法,它获取当前的HttpApplication并返回该实例
想象一下,在Global.asax.cs文件中,我将实例类作为私有字段.我们这样说:

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相同的问题:

>它是一个静态的,具体的引用,不能替代单独的行为或在测试期间存根/模拟>您不能对此进行子类化并保留此行为,因此很容易绕过此示例的单例性质

网友评论