我正在使用Unity IoC框架,并且在主机MVC层中有一个Bootstrapper.cs类来注册所有组件。但是,在我的体系结构中,我在MVC层下面有一个“服务”层,它也使用DI,并且向其中注入了存储库接口(MVC层中未使用存储库接口-它在其控制器中注入了服务层接口) 。

所以我的问题是:我是否仍可以在整个应用程序的MVC / UI层中将存储库接口注册为它的具体类型,还是在我的“服务”层中添加对Unity的另一个引用并创建另一个Bootstrapper.cs类定义该特定层使用的接口类型?

即使答案是我可以在UI层中注册接口,我仍然想知道常用的做法。我不喜欢在MVC / UI层中注册该类型的事情是,我必须添加对Repository层的引用以进行注册,即使知道在该层中未使用它。在服务层中使用。

谢谢!

最佳答案

每个应用程序应具有自己的合成根,即配置应用程序的位置(see this answer for details)。

这取决于上下文,但是通常来说,如果将容器配置拆分到各个层中,则将要做出有关层配置的决策,因为这些配置太靠近层了,并且很可能会丢失总体视图。

例如,在您的业务逻辑层之一中,您正在注册服务:

container.RegisterType<ISercice1, MyImplementation1>(new PerThreadLifetime())


但是,在Web应用程序中使用该层时,您可以确定PerSession或PerRequest生存期将是更好的生存期。这种决定应该只在一个地方,而不能遍及各层。

关于c# - 我可以将所有IoC容器组件注册在单层中,还是在使用的每一层中注册?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14511734/

10-09 12:37