如何防止漏洞抽象?

时间:2013-11-01 19:06:54

标签: c# dependencies code-injection abstraction

我正在编写Active Directory包装器,尝试遵循SOLID和其他最佳实践。该界面目前是“IActiveDirectory”。

我现在遇到的问题是实现ActiveDirectory必须实现IDisposable来处理在这个包装器中创建和处理的一些资源,我不确定如何在尝试编写接口时解决这个问题,等...我不想创建一个漏洞抽象(即装饰带有IDisposable的IActiveDirectory。)我无法使服务细化(即将资源的创建/处理范围限定为方法调用),因为它的性能潜在的依赖关系。

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

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

1 个答案:

答案 0 :(得分:0)

一方面,处置资源的责任落在获得资源的人身上。你的客户没有创建ActiveDirectory,工厂也是如此 - 从概念上讲,工厂必须处理ActiveDirectory。

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

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

相关问题