IOC / DI:注册混凝土类型代码气味?

在我目前的项目中,我一直在努力解决这个问题。 我遇到过一些我没有(并且不需要)实现任何特定接口的具体类型的情况。 有时我希望通过容器进行解析,因为类型是在singleon生命周期中注册的; 有时,类型具有构造函数参数,这些参数是较大对象图的一部分,或者自身在单例生命周期中注册。

当我输入如下代码时,我总觉得有点奇怪:

Container.RegisterType(); 

有关这是代码气味还是违反使用IOC容器的最佳做法的任何想法?

IoC容器是一个Inversion of Control容器,而不是Abstraction Container或Interface to Implementation Container。 将类映射到自己并让容器管理它们的生命周期是完全合法的。

如果您的设计不要求使用接口,请不要强制它们。 这样做会有一种设计气味,即不必要的复杂性。

我认为IoC容器是类固醇的工厂。 并非每个工厂都是抽象工厂(例如单身人士)。 因此,并非IoC容器中的每个注册都必须是抽象映射的实现。