我可以在单层或每个使用的层中注册所有IoC容器组件吗?

atc*_*way 1 c# inversion-of-control unity-container

我正在使用Unity IoC框架,并Bootstrapper.cs在我的主机MVC层中有一个类来注册所有组件.然而,在我的建筑我有MVC层下方的"服务"层,即也使用DI并有库接口注入到它(库接口未在MVC层使用-它注入到其控制器的服务层接口) .

所以我的问题如下:我是否仍然可以将存储库接口注册到整个应用程序的MVC/UI层中的具体类型,或者我是否添加对Unity的另一个引用并Bootstrapper.cs在我的"服务"层中创建另一个类来定义接口特定图层使用的类型?

即使答案是我可以在UI层注册界面,我仍然想知道常见的做法.我喜欢在MVC/UI层中注册该类型的事情是我必须添加对Repository层的引用才能进行注册,甚至知道它不在该层中使用.它用在服务层中.

谢谢!

ono*_*nof 5

每个应用程序都应该有自己的Composition Root,即配置应用程序的位置(有关详细信息,请参阅此答案).

这取决于上下文,但一般来说,如果您在层中拆分容器配置,那么您将决定层的配置过于接近层,并且您可能会丢失一般视图.

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

container.RegisterType<ISercice1, MyImplementation1>(new PerThreadLifetime())
Run Code Online (Sandbox Code Playgroud)

但是,当在Web应用程序中使用该层时,您可以确定PerSession或PerRequest生命周期将更好.这些决定应仅在一个地方,而不是通过各层传播.