检查调用静态方法时是否调用了特定方法

时间:2017-06-23 06:32:40

标签: c# attributes

我正在寻找一种简单的机制,以便在调用其他方法时检查是否已调用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 个答案:

答案 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 必须初始化。