我正在寻找一种简单的机制,以检查是否在调用另一种方法时调用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
必须如果您尝试调用它。