0

我正在使用 Unity、Prism 构建解耦应用程序。

我担心的问题是服务中的资源管理。在示例中更容易解释:假设我们有一些接口 IDataRetriever 为我们提供某种数据。实现被注册为一个实例。这个接口的实现可以基于任何东西:文件(FileDataRetriever)、Sql Server(SqlServerDataRetriever),甚至是简单的字典。配置要使用的具体实现(可能通过配置文件,但没关系)。

一旦应用程序完成工作,取决于服务实现,它有时应该释放资源(例如关闭连接、关闭文件等)或不释放资源(例如,使用 Dictionary 时),但是当我使用解耦抽象时,我不知道这两件事:1. 当资源应该被释放 2.具体实现是否需要资源释放。

我可以想到引导程序实现 IDisposable 的场景,并检查每个服务的 IDisposable 实现,并为所有模块调用 Dispose(这意味着所有模块也必须实现 IDisposable)但它看起来不正确处理此类事情的方式(太复杂)?

4

1 回答 1

1

您可能会决定,一旦您的数据检索器完成其操作,您就能够(实际上更可取)释放资源。在这种情况下,资源的释放将隐含在对您的GetData或等效方法的调用中,该方法是您的客户端代码使用的抽象的一部分。

或者,如果您在检索数据之前不希望释放资源,那么您将需要Release在抽象上公开一个或等效的方法。如果不需要,强制服务实现这个方法是很麻烦的,所以你可以把这个方法放在一个单独的接口上,只为适当的服务实现它。

然后,您的客户端代码可以检查注入的服务是否在适当的时间实现了此接口,并在适当的情况下调用该Release方法。

于 2013-05-04T09:22:05.410 回答