2015-02-23 164 views
0

有没有办法总是调用静态类的构造函数?搜索后,我看到它只打一次电话。总是调用静态构造函数

我有一个有很多方法的类,我的方法就像20个方法,但是让我们来想象这个类有500个方法。 这500个方法都有一个调用web服务的方法。 现在,调用web服务我都与证书安全检查之前(因改变服务器):

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

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

  • 复制并粘贴到500种的所有方法的代码(将创建封装两条线的方法)。
  • 转换静态类实例化进级,并把代码中的构造,但我将不得不改变代码来创建新类的对象,处置不能休息...

是有办法总是调用静态构造函数吗?我已经看到了方面的一些东西,但不确定如何使用它们。

+0

静态字典将被调用一次。你不能把它称为正常的构造函数。 – 2015-02-23 11:36:25

+0

你应该使用lamba表达式,在这个表达式中你将封装这两行,然后运行你以后要运行的任何东西。我的2美分。 – facundofarias 2015-02-23 11:37:05

+0

我会建议使用更好的设计架构。 。 。为你的需求使用静态构造函数是一个非常不明智的想法。 。 。 。 。 – 2015-02-23 11:37:44

回答

4

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

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

+0

)我可能会创建该类的实例。问题我认为,外部代码必须改变,你不能改变它,虽然这不是我的情况,幸运的是, – pepemadruga 2015-02-23 11:56:08

+0

证书在这里和其他类中检查。检查有点不同,不同的服务器,这就是为什么我们需要每次再次调用这个代码(如果它改变了) – pepemadruga 2015-02-23 11:58:05

+0

不是真的,如果没有“简单”的解决方案: – pepemadruga 2015-02-23 14:57:26

0

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

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

Implementing Singleton in C#

0

YIF您想进行安全检查,我建议使用Singleton格局。您可以在私人构造函数上进行安全检查,但请注意,这将会是可笑的错误

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

+0

静态类可以有一个静态构造函数 – aush 2015-02-23 11:40:05

+0

Static classs没有实例,甚至没有一个。 – juharr 2015-02-23 11:42:02

+0

@aush,你是对的。更正。 – user3021830 2015-02-23 11:42:36