最近学习了下 ASP.NET MVC,比较之前的 WebForm 没有了 IsPostBack 的判断,事件处理也被 Action 取代。MVC 中 WebForm中大量的事件处理中UI绑定,混杂的 js 注入, style 修改没有了;服务端控件不用了,结局是 View 被释放了,Controller可以被单元测试了,拿着 ViewModel 可以快速替换 View。(说句实话要不是有 Razor 这样的页面引擎加上 VS IDE 的强力智能感知,ASP.NET MVC 和 JSP 没有区别,说不定还会有人把 strust 标签,spring 标签拿来在 .NET 上封装一遍)
再加上现在的 EF,Model层以及DAL实现很自然的交给了 EF等ORM框架。加上现在的成熟的 Repository Pattern 和 UnitOfWork Pattern 实践上的Service分层也变成约定俗成。(关于 Repository 和 UnitOfWork 参看:Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application) 。分离出 Repository, UnitOfWork 就是避免在 Controller 里直接写入 Linq2Db 的代码,这样难以实现 Mockup,好比下面的代码:
(详细参考:Walkthrough: Using TDD with ASP.NET MVC)
【没有使用 Repository Pattern 的代码】
【使用 Repository Pattern 的代码】
测试可以用个 Mock Repository,_db 数据从哪来就自由了...
而 Controller 变成这样:
其实上面的都是引子,用 Unity 目的是进一步推迟 Repository 或者 UnitOfWork (很多时候演变成 Service 了) 的实例化时机,交给了 IoC 容器注入。以达到更灵活切换的目的,比如从 MS Entities 变换到 MySql Entities 或者是从 ObjectContext 变换到 DbContext (CodeFirst)。
下面介绍一下 Unity.MVC3 的实践过程:
1. EF CodeFirst Models
用 EF CodeFirst 创建一个 Models 工程,用来管理 Entities

表很简单,只有一个 DbSet<User>
2. GenericRepository
主要针对 EF(ObjectContext) 和 EF CodeFirst(DbContext) 抽出接口 IRepository

DbContextRepository<T> 对应于 DbContext 的 IRepository<T> 实现,通过构造方法注入 Context 实例
3. MVC Web 应用
(1) 先通过 NuGet 获取 Unity.MVC3
ASP.NET MVC3 中开放了依赖注入容器的接口IDependencyResolver,ASP.NET Controller 被调用时,会利用该接口进行依赖注入。因此可以利用这个接口,
使用任何的依赖注入容器。另外,Unity.MVC3.dll在UnityContainerExtensions 类里扩展了RegisterControllers 方法,
它将为当前 Assembly 所有非 abstract Controller 完成注册(来自 IControllerFactory 的依赖 )

添加完毕,会发现在 Web 工程下多出Bootstrapper.cs 文件

这里我把依赖关系都放到配置文件里了:
然后在 Global.asax.cs 里调用 Bootstrapper.Initialise(); 即可。
另外,需要注意的是<register type="IRepository[User]" mapTo="DbContextRepository[User]"> 里加上了<lifetime type="HierarchicalLifetimeManager" />
这样在 Controller 生命周期结束时才会调用 Dispose。(待展开)
再来看看 Controller 的实现:
根据上面的配置文件:<register type="IRepository[User]" mapTo="DbContextRepository[User]">
[Dependency] 标识的 UserRepository 会在 Controller 请求时被注入实例。
运行:

利用了 IoC 整个系统结构,好比如下图:

分享到:
相关推荐
《Apress.Pro.ASP.NET.MVC.3.Framework》是一本专为开发者深入理解ASP.NET MVC 3框架而编写的权威指南。这本书详细介绍了如何利用这一强大的Web开发技术来构建高效、可扩展且易于维护的Web应用程序。ASP.NET MVC 3是...
ASP.NET MVC4 CMS 是一个基于微软的ASP.NET MVC4框架构建的内容管理系统,它提供了一种高效、可扩展的方式来管理和展示网站内容。MVC(Model-View-Controller)设计模式是其核心,它将应用程序分为三个主要组件:...
Unity.Mvc3是Microsoft的Unity容器的一个扩展,专为ASP.NET MVC3设计,用于实现依赖注入。这个教程将详细介绍如何在ASP.NET MVC3项目中使用Unity.Mvc3来实现依赖注入。 首先,让我们理解什么是依赖注入。依赖注入的...
《Wrox Professional ASP.NET MVC 2》是2010年6月出版的一本专业级ASP.NET MVC技术书籍,由知名技术出版社Wrox发行。这本书深入探讨了ASP.NET MVC框架的各个方面,为开发者提供了全面而深入的指导。ASP.NET MVC是一...
《ASP.NET MVC 4 in Action》是一本专为开发者深入理解和掌握ASP.NET MVC 4框架技术而编写的权威书籍。ASP.NET MVC是一个用于构建Web应用程序的开源框架,它结合了模型-视图-控制器(MVC)设计模式,提供了灵活、可...
3. **路由系统**:ASP.NET MVC的路由系统是其核心功能之一,它决定了URL如何映射到控制器的特定操作。开发者可以自定义路由规则,以实现灵活的URL结构。 4. **控制器(Controllers)**:控制器接收HTTP请求,处理...
【Asp.net MVC 3 实例学习:ExtShop 系列最终源代码】 Asp.net MVC 3 是微软推出的一款基于模型-视图-控制器(Model-View-Controller)架构的Web应用程序开发框架,它是Asp.net技术的一个重要分支,为开发者提供了...
3. **模型绑定**:模型绑定是ASP.NET MVC中一个强大的特性,它自动将HTTP请求的数据(如表单字段或查询字符串)映射到控制器方法的参数中,简化了数据验证和输入处理。 4. **视图引擎**:Razor视图引擎是ASP.NET ...
常见的IoC容器如Unity、Autofac和 Ninject 可与ASP.NET MVC无缝集成。 **8.测试** ASP.NET MVC设计时考虑了测试,控制器和模型可以很容易地进行单元测试。Moq和NUnit等工具可以用来编写和运行测试用例。 **9. ...
ASP.NET MVC 是微软提供的一种基于模型-视图-控制器(Model-View-Controller,MVC)设计模式的开源Web应用程序框架。这个系列的教程【ASP.NET.MVC系列].ASPNETMVCQuickly.pdf 可能涵盖了ASP.NET MVC的核心概念、开发...
ASP.NET MVC是一个开源的Web应用程序框架,由微软公司开发并维护,用于构建可维护、高性能的Web应用。这个框架基于模型-视图-控制器(MVC)设计模式,提供了清晰的分离关注点,使得开发者能够更高效地进行开发。本文...
4. **依赖注入(DI)**:ASP.NET MVC支持依赖注入框架,如Unity或Autofac,帮助解耦组件,提升代码的可测试性。 5. **过滤器(Filters)**:可以定义全局或特定动作的过滤器,如授权、异常处理等,简化代码并实现...
ASP.NET MVC支持多种DI框架,如Unity、Autofac等。 10. **Ajax支持**: ASP.NET MVC提供了内置的Ajax支持,允许开发人员创建异步交互的用户体验,无需离开当前页面即可更新部分视图。 通过以上介绍,我们可以看出...
ASP.NET MVC 5 是微软开发的一个用于构建动态网站的开源框架,它基于.NET Framework,结合了Model-View-Controller(MVC)设计模式,提供了强大的数据处理和用户体验管理能力。这个框架非常适合用来开发复杂的Web...
11. **依赖注入**:ASP.NET MVC 3.5支持依赖注入,允许开发者通过IoC容器(如Unity或Ninject)来解耦组件,提高代码可扩展性和可测试性。 12. **源代码分析**:通过实战篇中的源代码,你可以学习到如何组织MVC项目...
ASP.NET MVC3是一种基于微软.NET Framework的开源web应用程序框架,专为构建动态、数据驱动的Web应用程序而设计。它结合了Model-View-Controller(MVC)设计模式、依赖注入、单元测试和ASP.NET的强大功能,提供了一...
ASP.NET MVC 5是微软开发的一个强大的Web应用程序框架,它结合了模型-视图-控制器(MVC)设计模式、ASP.NET Web Pages和Web API,为开发者提供了构建高性能、可测试且易于维护的Web应用程序的强大工具。这本书《精通...
在ASP.NET MVC3中,可以通过依赖注入框架(如Unity或 Ninject)将依赖关系传递给控制器和其他组件,而不是在代码内部直接创建依赖对象。这样可以提高代码的可重用性和可测试性。 在学习过程中,你可能涉及以下知识...
在这个实例中,我们将探讨如何在ASP.NET MVC4项目中集成Unity IoC Container,并使用它来管理我们的依赖。首先,我们需要安装Unity.Mvc NuGet包,这将为我们的项目添加必要的Unity库和配置。 1. **安装Unity.Mvc**...
【描述】:“ibatis.net的asp.net MVC的实例,集成了Microsoft.unity的IOC” 集成Microsoft Unity作为依赖注入(DI)容器是这个项目的关键特性。Unity是一个开源的依赖注入(DI)框架,它能够帮助我们实现面向接口...