6

我正在编写一个 Active Directory 包装器,试图遵循 SOLID 和其他最佳实践。该接口当前为“IActiveDirectory”。

我现在遇到的问题是实现 ActiveDirectory 必须实现 IDisposable 以处理在此包装器中创建和处理的一些资源,并且我不确定如何在尝试对接口等进行编码时解决这个问题。 . 我不想创建一个泄漏的抽象(即用 IDisposable 装饰 IActiveDirectory。)由于底层依赖项的性能,我无法使服务细化(即,将资源的创建/处置范围限定为方法调用)。

我目前有一个工厂,以便 IActiveDirectory 的消费者可以按需创建一个工厂,但我需要一种干净、方便的方式让消费者表示它已使用资源完成。

如何在不泄露资源包装抽象的情况下为消费者提供合同(即接口)?我应该只公开没有接口的实现吗?我的消费者或我的 DI 容器是否有办法管理此服务的生命周期?

4

1 回答 1

0

一方面,处置资源的责任落在获得资源的人身上。您的客户端不创建 ActiveDirectory,工厂创建 - 从概念上讲,工厂必须处理 ActiveDirectory。

这很难,但可以实现。一个示例是 Web 应用程序,您可以将工厂范围限制为请求的范围,并在请求完成时使用活动目录安全地处理它。另一个示例是当您的实例由知道如何处理 IDisposable 的 IoC 容器管理时(NInject 有一些棘手的技巧可以做到这一点)。

然后,如果这不适用于您,您应该承认通用解决方案不是性能最高的(这一点也不奇怪),如果您仍然想要抽象,您可以创建额外的抽象 IActiveDirectorySession 明确表示通信与 AD 的会话,并且至少出于非常自然的原因必须实施 IDisposable。

于 2013-11-01T21:22:29.817 回答