`
tubaluer
  • 浏览: 1499806 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

【ASP.NET】ASP.NET MVC 3 & Unity.MVC3

 
阅读更多
最近学习了下 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》PDF版

    《Apress.Pro.ASP.NET.MVC.3.Framework》是一本专为开发者深入理解ASP.NET MVC 3框架而编写的权威指南。这本书详细介绍了如何利用这一强大的Web开发技术来构建高效、可扩展且易于维护的Web应用程序。ASP.NET MVC 3是...

    asp.net MVC4 CMS

    ASP.NET MVC4 CMS 是一个基于微软的ASP.NET MVC4框架构建的内容管理系统,它提供了一种高效、可扩展的方式来管理和展示网站内容。MVC(Model-View-Controller)设计模式是其核心,它将应用程序分为三个主要组件:...

    使用Unity.MVC3在asp.net mvc3中实现依赖注入

    Unity.Mvc3是Microsoft的Unity容器的一个扩展,专为ASP.NET MVC3设计,用于实现依赖注入。这个教程将详细介绍如何在ASP.NET MVC3项目中使用Unity.Mvc3来实现依赖注入。 首先,让我们理解什么是依赖注入。依赖注入的...

    Wrox.Professional.ASP.NET.MVC.2.Jun.2010.rar

    《Wrox Professional ASP.NET MVC 2》是2010年6月出版的一本专业级ASP.NET MVC技术书籍,由知名技术出版社Wrox发行。这本书深入探讨了ASP.NET MVC框架的各个方面,为开发者提供了全面而深入的指导。ASP.NET MVC是一...

    Manning.ASP.NET.MVC.4.in.Action

    《ASP.NET MVC 4 in Action》是一本专为开发者深入理解和掌握ASP.NET MVC 4框架技术而编写的权威书籍。ASP.NET MVC是一个用于构建Web应用程序的开源框架,它结合了模型-视图-控制器(MVC)设计模式,提供了灵活、可...

    精通ASP.NET.MVC.5框架(第五版) 英语原版

    3. **路由系统**:ASP.NET MVC的路由系统是其核心功能之一,它决定了URL如何映射到控制器的特定操作。开发者可以自定义路由规则,以实现灵活的URL结构。 4. **控制器(Controllers)**:控制器接收HTTP请求,处理...

    Asp.net MVC 3实例学习之ExtShop系列最终源代码

    【Asp.net MVC 3 实例学习:ExtShop 系列最终源代码】 Asp.net MVC 3 是微软推出的一款基于模型-视图-控制器(Model-View-Controller)架构的Web应用程序开发框架,它是Asp.net技术的一个重要分支,为开发者提供了...

    ASP.NET.MVC.4.Recipes

    3. **模型绑定**:模型绑定是ASP.NET MVC中一个强大的特性,它自动将HTTP请求的数据(如表单字段或查询字符串)映射到控制器方法的参数中,简化了数据验证和输入处理。 4. **视图引擎**:Razor视图引擎是ASP.NET ...

    [ASP.NET.MVC系列].ProASPnetMVCFramework

    常见的IoC容器如Unity、Autofac和 Ninject 可与ASP.NET MVC无缝集成。 **8.测试** ASP.NET MVC设计时考虑了测试,控制器和模型可以很容易地进行单元测试。Moq和NUnit等工具可以用来编写和运行测试用例。 **9. ...

    [ASP.NET.MVC系列].ASPNETMVCQuickly

    ASP.NET MVC 是微软提供的一种基于模型-视图-控制器(Model-View-Controller,MVC)设计模式的开源Web应用程序框架。这个系列的教程【ASP.NET.MVC系列].ASPNETMVCQuickly.pdf 可能涵盖了ASP.NET MVC的核心概念、开发...

    Asp.net Mvc官方源代码

    ASP.NET MVC是一个开源的Web应用程序框架,由微软公司开发并维护,用于构建可维护、高性能的Web应用。这个框架基于模型-视图-控制器(MVC)设计模式,提供了清晰的分离关注点,使得开发者能够更高效地进行开发。本文...

    一个完整的asp.net mvc架构网站实例

    4. **依赖注入(DI)**:ASP.NET MVC支持依赖注入框架,如Unity或Autofac,帮助解耦组件,提升代码的可测试性。 5. **过滤器(Filters)**:可以定义全局或特定动作的过滤器,如授权、异常处理等,简化代码并实现...

    asp.net mvc handler

    ASP.NET MVC支持多种DI框架,如Unity、Autofac等。 10. **Ajax支持**: ASP.NET MVC提供了内置的Ajax支持,允许开发人员创建异步交互的用户体验,无需离开当前页面即可更新部分视图。 通过以上介绍,我们可以看出...

    [.NET][ASP.NET MVC 5 网站开发之美].rar

    ASP.NET MVC 5 是微软开发的一个用于构建动态网站的开源框架,它基于.NET Framework,结合了Model-View-Controller(MVC)设计模式,提供了强大的数据处理和用户体验管理能力。这个框架非常适合用来开发复杂的Web...

    ASP.NET 3.5 MVC 架构与事件源代码第 三部分实战篇

    11. **依赖注入**:ASP.NET MVC 3.5支持依赖注入,允许开发者通过IoC容器(如Unity或Ninject)来解耦组件,提高代码可扩展性和可测试性。 12. **源代码分析**:通过实战篇中的源代码,你可以学习到如何组织MVC项目...

    ASP.NET MVC3开发的项目例子(包含数据库文件)

    ASP.NET MVC3是一种基于微软.NET Framework的开源web应用程序框架,专为构建动态、数据驱动的Web应用程序而设计。它结合了Model-View-Controller(MVC)设计模式、依赖注入、单元测试和ASP.NET的强大功能,提供了一...

    精通ASP.NET MVC 5.pdf

    ASP.NET MVC 5是微软开发的一个强大的Web应用程序框架,它结合了模型-视图-控制器(MVC)设计模式、ASP.NET Web Pages和Web API,为开发者提供了构建高性能、可测试且易于维护的Web应用程序的强大工具。这本书《精通...

    一步一步学习ASP.NET MVC3 &EF Code First CTP 5&DI(二)

    在ASP.NET MVC3中,可以通过依赖注入框架(如Unity或 Ninject)将依赖关系传递给控制器和其他组件,而不是在代码内部直接创建依赖对象。这样可以提高代码的可重用性和可测试性。 在学习过程中,你可能涉及以下知识...

    ASP.NET MVC4中使用Unity Ioc Container 实例

    在这个实例中,我们将探讨如何在ASP.NET MVC4项目中集成Unity IoC Container,并使用它来管理我们的依赖。首先,我们需要安装Unity.Mvc NuGet包,这将为我们的项目添加必要的Unity库和配置。 1. **安装Unity.Mvc**...

    ibatis.net的asp.net MVC的实例

    【描述】:“ibatis.net的asp.net MVC的实例,集成了Microsoft.unity的IOC” 集成Microsoft Unity作为依赖注入(DI)容器是这个项目的关键特性。Unity是一个开源的依赖注入(DI)框架,它能够帮助我们实现面向接口...

Global site tag (gtag.js) - Google Analytics