我正在寻找一种简单的机制,以便在调用其他方法时检查是否已调用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()
{
}
答案 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
必须初始化。