启动我的应用程序时,我有几个类需要读取某些文件才能创建一组默认数据。
执行此操作的逻辑位置(在我看来)位于Shared类构造函数中;如果读取默认文件失败,那么想法就是抛出一个类级事件。不幸的是,这不能用于尝试访问此类事件,以便为其附加处理程序,在附加事件之前触发类构造函数。在失败的情况下,构造函数启动,触发失败事件,构造函数完成,然后附加事件处理程序,在事件触发后。
我能想到的唯一其他解决方案是给类一个“typeInitialisedSuccessfully”布尔属性,并在每个调用周围放置一个try / catch块来构造一个类的实例,这似乎是不必要的kludgey给我。
有人可以提出更优雅的解决方案吗?
编辑:因为这是一个基本的类,几乎在我们的几乎所有软件工具中以某种形式使用,我非常希望能够通知未来程序员需要调用类型初始化程序的解决方案,这就是为什么我最初是作为解决方案进入共享构造函数。答案 0 :(得分:2)
我建议在你的课上使用Init(可以是静态的)方法。您将在每个要初始化的类的应用程序启动时运行此方法。在这种情况下,您可以将其包装在try catch中并相应地执行操作。
重新编辑: 通常在共享构造函数之类的地方抛出异常是个坏主意 - 你无法真正捕获它,很难预测何时会调用init等。
如果您指定我将添加要检查的IsInitialized字段,并在调用需要它的方法/属性时抛出异常。但它可能会变得乏味。
我想要的另一个选择可能与您当前的架构相差甚远。在许多IoC工具中,他们使用Startable(castle,autofac)的概念 - 即您使用start方法指定接口,IoC将确保方法在指定时间运行(最有可能在应用程序运行时)启动)。您可以在“开始”方法中执行错误处理,并使用所有详细信息冒泡任何包装异常。 我可以详细说明这一点,但我觉得这不是你想去的方式。