2017-06-23 89 views
0

我正在寻找一种简单的机制来检查Initialize()是否在调用其他方法时被调用。检查调用静态方法时是否调用了特定方法

下面是一个例子

private static string _serviceUrl; 

private static Service _service; 

public ServiceHelper() 
{ 

} 

public static void Initialize(string serviceUrl) 
{ 
    _serviceUrl = serviceUrl; 
    _service = new Service(_serviceUrl); 
} 

public static Foo() 
{ 

} 

public static Foo2() 
{ 

} 

现在,我要的是某事。在检查Foo/Foo2_service != null(断言Initialize()被称为 - 否则抛出异常)

因为我需要检查,在我想一定有某事比if检查它的每一个方法的内部更容易的每一个方法。

(可惜)我没有深入Attributes - 这可能是一种方法吗?

伪代码:

[AssertInitialized] 
public static void Foo() 
{ 

} 
+1

设置一个标志'initialized',并检查你的静态方法 –

+0

@BiesiGrr“因为我需要检查每个方法中我认为必须比检查每个方法内部是否更容易。 –

+0

在这种情况下,单身人士可能会有帮助吗?你可以在你的类中有一个静态实例,并用一个构造函数初始化它。 –

回答

2

您可以创建一个包装属性,它抛出一个错误,如果支持字段没有初始化:

private static Service _service; 
private static Service Service 
{ 
    get 
    { 
     if(_service == null) 
     { 
      throw new InvalidOperationException("Need to call Initialize(string) first"); 
     } 
     return _service; 
    } 
} 

或C#7

private static Service _service; 
private static Service Service => _service ?? throw new InvalidOperationException("Need to call Initialize(string) first"); 

然后在代码调用Service而不是_service。这可以确保如果您尝试调用Service必须进行初始化。