ASP.NET MVC 应用程序中的 IRepository、IService、Unity,参考问题
我是 Unity 的新手,但这个问题对于 IoC 来说更通用,而且我对整体实现 IoC 还很陌生。我有具有以下项目结构的 VS2010 解决方案(稍微简化):
- 业务对象 – 文件夹
- DomainModel(类库项目)– Entity Framework 2 POCO 实体
- 数据层 – 文件夹
- DataAccess(类库项目)- EF2 EDMX
- Repository(类库项目)——IRepository 接口&存储库具体实现
- 表示层 - 文件夹
- WebUI – MVC 项目
- 服务层
- Service(类库项目)——IService 接口和服务(外观模式)具体实现
所有项目都引用 DomainModel 项目。
存储库引用 DataAccess 项目。
服务层引用存储库项目。
WebUI引用了Service项目& Unity 程序集。
我已将 Unity 配置为在 WebUI 中正确注入所有服务类型(通过自定义 UnityControllerFactory.cs 的 global.asax)。但是如何在服务层配置 Unity 来注入存储库对象呢?
我不想从 WebUI 引用 Repository 项目,以确保在开发过程中没有人走捷径并绕过服务层。
我有几个想法(不确定是否能解决这个问题):
- 将 IRepository 接口移至 DomainModel 中并添加 Unity.RegisterType<>调用 IRepository
- 在 Web.config 中设置 Unity 配置
任何方向都将不胜感激,特别是如何为服务层/存储库配置 Unity,而且还涉及项目的一般情况。
I'm new to Unity, but this question is more generic to IoC, and I’m pretty new to implementing IoC as a whole. I have VS2010 solution with this project structure (simplified slightly):
- Business Objects – Folder
- DomainModel (Class Lib prj.) – Entity Framework 2 POCO entities
- Data Layer – Folder
- DataAccess (Class Lib prj.) – EF2 EDMX
- Repository (Class Lib prj.) – IRepository interface & repository concrete implementations
- Presentation Layer – folder
- WebUI – MVC Project
- Service Layer
- Service (Class Lib prj.) – IService interface and service (façade pattern) concrete implementations
All project reference the DomainModel project.
Repository references the DataAccess project.
Service Layer references the Repository project.
WebUI references the Service project & the Unity assemblies.
I have Unity configured to inject all my service types correctly in the WebUI (global.asax via a custom UnityControllerFactory.cs). But how do I configure Unity in the service layer to inject the repository objects?
I DON’T want to reference the Repository project from the WebUI to ensure during development no one shortcuts and bypass the Service layer.
Couple Ideas I have (not sure if it will solve it):
- Move the IRepository Interfaces into the DomainModel and add the Unity.RegisterType<> calls for the IRepository
- Set up Unity configuration in the Web.config
Any direction would be greatly appreciated, specifically to how to configure Unity for the service layer / Repository, but also in general about the project.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在服务项目中添加某种引导程序。然后在 WebUI 中引用引导程序。
实现此目的的一种方法是编写一个小型 Unity 扩展。像这样:
然后,在创建容器并初始化它的 Web 项目中,执行以下操作:
Add a bootstrapper of some sort in the Service project. Then reference the bootstrapper in the WebUI.
One way to do this would be to write a small Unity extension. Something like this:
Then, in the web project where you create the container and initialize it, do this: