我一直在与 Ninject 合作使用依赖注入来实现应用程序。我觉得我对这些概念有相当透彻的理解,并且非常喜欢应用程序使用 DI 实现的松散耦合和可测试架构。但是,我正在为一种特定类型的服务而苦苦挣扎,并且正在寻找了解我是否做错了什么或者其他人是否遇到了同样的事情。
基本上,我最终得到了一些没有其他服务依赖于它们的服务/类(数量非常少)。正因为如此,该类永远不会被实例化,即使它是必需的,因为它在应用程序中扮演着有用的角色。例如,假设我有一个IMonkeyRepository
服务和一个IMonkeyPopulator
服务。假设该IMonkeyPopulator
服务确实没有公共 API,它的唯一职责(遵循单一职责原则)是发现网络上的猴子并IMonkeyRepository
用它们填充。该服务依赖于IMonkeyRepository
可能还有其他一些服务来处理它与网络的交互(例如,端口和地址的配置数据)。但是,IMonkeyPopulator
它没有公共 API,它只是一个空接口。
这是一个糟糕的设计还是我错过了某种代码味道?我显然可以将此功能移动到存储库本身,但这对我来说似乎违反了 SRP(存储库具有有用的访问功能等,并且实际上可以由多个服务填充)。我考虑过或尝试过但不满意的一些方法是:
- 使服务具有一个公共方法,例如 Start,必须调用它才能开始工作。这样做的缺点是需要在系统中确定一个有点随意的位置来进行调用。
- 将服务绑定到我在创建 Ninject 内核时实例化的常量。这要求我明白没有人依赖这个服务,所以必须特别处理,这似乎是错误的。
- 将一些成员添加到服务中,并在我的应用程序中的某处创建一个 GUI,以读取这些值(例如服务的状态等)。显然,必须为我的应用程序添加一个仅出于这个原因才存在的 GUI 是非常愚蠢的(尽管有时对调试等很有用)。
有什么想法或指导吗?