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层的引用才能进行注册,甚至知道它不在该层中使用.它用在服务层中.
谢谢!
每个应用程序都应该有自己的Composition Root,即配置应用程序的位置(有关详细信息,请参阅此答案).
这取决于上下文,但一般来说,如果您在层中拆分容器配置,那么您将决定层的配置过于接近层,并且您可能会丢失一般视图.
例如,在您的一个业务逻辑层中,您正在注册服务:
container.RegisterType<ISercice1, MyImplementation1>(new PerThreadLifetime())
Run Code Online (Sandbox Code Playgroud)
但是,当在Web应用程序中使用该层时,您可以确定PerSession或PerRequest生命周期将更好.这些决定应仅在一个地方,而不是通过各层传播.