【发布时间】:2016-02-25 20:03:05
【问题描述】:
我在使用内部类型的依赖注入时遇到了一些麻烦。尽管我已经使用 Castle Windsor 几年了,但我从来没有真正考虑过太多的可见性,所以一切通常最终都是公开的(部分是为了让 Windsor 开心,部分是为了便于在单元测试中进行模拟) .但是我现在需要设计一个 API。
我很欣赏下面的示例不是很好,但它旨在说明公开具有不应公开访问的依赖项的类型的场景。
假设我的 API 层公开了一个 GetCustomer() 方法。这将返回一个 Customer 类,该类公开一个 SendEmail() 方法,该方法利用 MailService 类来实现电子邮件发送。
我想将 MailService 注入客户,但我不希望 API 的使用者可以访问 MailService。我相信它不能是内部的,因为您不能将内部类型传递给公共构造函数。因此,将 Customer ctr 设置为内部是有意义的(因为只有 BLL 应该创建它们),但 Windsor 抱怨说,因为注册的类型必须有一个公共 ctr。
我觉得我在这一切中缺少一些基本的东西。我将如何设计这样的东西?我想一种解决方案是接口,但是当(通常)只有一个实现时,为每种内部类型创建一个接口不知何故感觉不对。
【问题讨论】:
标签: oop inversion-of-control castle-windsor ioc-container