0

在启动我的应用程序时,我有几个类需要读取某些文件才能创建一组默认数据。

这样做的逻辑位置(对我来说)是在共享类构造函数中;如果读取默认文件失败,这个想法是抛出一个类级别的事件。不幸的是,这不起作用,因为试图访问这样的事件,为了将处理程序附加到它,在事件附加之前触发类构造函数。在失败的情况下,构造函数启动,触发失败事件,构造函数完成,然后在事件触发附加事件处理程序。

我能想到的唯一其他解决方案是给类一个“typeInitialisedSuccessfully”布尔属性,并在每个调用周围放置一个 try/catch 块以构造类的实例,这对我来说似乎不必要地笨拙。

有人可以提出更优雅的解决方案吗?

编辑:因为这是一个基本类,在我们几乎所有的软件工具中都以一种或另一种形式使用,我非常希望有一个解决方案可以通知未来的程序员需要调用类型初始化程序,这就是我最初去的原因共享构造函数作为解决方案。

4

1 回答 1

2

我建议在你的类上有一个 Init (可以是静态的)方法。您将在应用程序启动时为每个要初始化的类运行此方法。在这种情况下,您可以将其包装在 try catch 中并采取相应措施。

重新编辑:通常在共享构造函数之类的地方抛出异常是个坏主意-您无法真正捕捉到它,很难预测何时调用 init 等。

如果您指定,我将添加要检查的 IsInitialized 字段,并在调用需要它的方法/属性时抛出异常。但它可能会变得乏味。

我会选择的另一个选择可能与您当前的架构相去甚远。在许多 IoC 工具中,他们使用 Startable (Castleautofac)的概念 - 即您指定一个带有 start 方法的接口,IoC 将确保该方法在指定时间运行(最有可能在应用程序启动时)。您将在您的“开始”方法中进行错误处理,并使用所有详细信息冒泡任何包装的异常。我可以详细说明这一点,但我觉得这不是你真正想要的方式。

于 2009-04-06T07:30:59.297 回答