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



我正在寻找一种简单的机制,以检查是否在调用另一种方法时调用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()
{
}

现在我想要的是STH。在Foo / Foo2检查_service != null(已称为Initialize()-否则抛出异常(

由于我需要检查在每种方法中都必须检查STH比在每种方法内使用if更容易的STH。

(可悲的是(我对Attributes不深入 - 这可能是一种方法吗?

伪代码:

[AssertInitialized]
public static void Foo()
{
}

您可以创建一个包装纸,如果备份字段不初始化,则会引发错误:

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 必须如果您尝试调用它。

最新更新