始终调用静态构造函数

时间:2015-02-23 11:34:10

标签: c# .net constructor static

有没有办法总是调用静态类的构造函数?经过搜索,我发现只有一次通话。

我有一个有很多方法的类,我的方法就像20个方法,但我们想象这个类有500个方法。 这500种方法都可以调用Web服务。 现在,在调用webservice之前,我必须使用证书进行安全检查(由于服务器的更改):

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
CredentialCache cache = new CredentialCache();

所以我必须在每次调用之前编写该代码。 所有方法都是静态的,以及类,所以我的选择是:

  • 将代码复制并粘贴到所有500种方法中(将创建一种封装这两行的方法)。
  • 将静态类转换为实例化类,并将代码放在构造函数中,但我必须更改其余代码以创建此新类的对象,并将其置于...

有没有办法永远调用静态构造?我已经看到了关于Aspects的一些信息,但不确定如何使用它们。

4 个答案:

答案 0 :(得分:4)

static构造函数只能运行一次。你不会改变它。

正如您所说,最好的解决方案是创建类的实例并将需要在构造函数中再次运行的代码放入其中。在我看来,虽然证书检查需要进行一次,因为证书在几秒钟内不会发生变化。

答案 1 :(得分:2)

没有

static constructor只能调用一次,仅用于初始化,不适用于逻辑(如身份验证)

答案 2 :(得分:0)

使用类的Singleton实例而不是实例化或静态类实例。

您可以获得实例化类的强大功能,但可以像使用静态类一样使用它,这意味着您可以解决重复代码的问题,并且您可以像使用静态类一样使用它,因为您的单个实例可用作静态属性。

Implementing Singleton in C#

答案 3 :(得分:0)

如果您想进行安全检查,我建议使用Singleton模式。您可以在私人构造函数中进行安全检查,但请注意,这将是非常错误的

它只会对第一个呼叫进行安全检查,然后将驻留在内存中,并且不一定会对其他呼叫执行安全检查。