我正在尝试改装(我知道的坏主意,但迟到总比没有好)IOC和DI成为现有的解决方案。
代码库由大约30个项目组成,每个项目都有类,对外界几乎没有或根本没有可见性。作为IOC的新东西,我正在尝试在重新编写代码时使用最佳实践,并且最好不要传递IOC容器或使其成为静态,因此我试图通过构造函数注入来完成所有操作。
然而,这就是我的问题,我不得不在项目中公开很多类(即物理.csproj文件)。我必须这样做,因为我的'配置模块'(我正在使用Ninject,但这是一个IOC不可知的问题)需要了解任何项目中任何类的所有内容,以便能够解析依赖关系。 / p>
我错过了重要的事吗?如果基于接口,我的所有课程都应该公开吗?我可以以某种方式为我的每个csproj边界创建一个IOC容器,并为我做注射吗?
TA
答案 0 :(得分:2)
您是否可以在每个项目中编写配置模块,并且只将其公开?然后使用所有模块而不是单个模块配置ninject ...
答案 1 :(得分:1)
我相信你走的正确。通常,任何IoC容器都需要知道(a)接口和(b)实现,以便它可以连接所有内容。您通常在更高级别的模块中进行“接线”(在这种情况下是您的配置模块项目);较低级别的模块不需要知道接口的所有可能实现。为了实现这一目标(并且为了便于测试),实现需要公开。
如果你真的想要你可以使用InternalsVisibleTo,但我不会。如果你没有使用IoC,你还是需要公开这些课程。
您还可以查看MEF;显然是it allows the implementations to be private or internal。