1、首先创建一个MVC项目 定义Model 层  view 层 index.cshtml  控制器层Controllers等文件

2、在线安装或者引用dapper 以及扩展相关包 同时Autofac 的相关包以及 Autofac.Asp.Net.Mvc5 包之类

3、定义Model

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace AutofacMVC.Models
  7. {
  8. /// <summary>
  9. /// 定义Model 
  10. /// </summary>
  11. public class UserInfo
  12. {
  13. public int Id { get; set; }
  14. public string UserName { get; set; }
  15. public string Nation { get; set; }
  16. public string TrueName { get; set; }
  17. public DateTime Birthday { get; set; }
  18. public string LocalAddress { get; set; }
  19. public int Gender { get; set; }
  20. }
  21. }

4、 创建文件夹Repository   定义UserInfoRepository 实现IUserInfoRepository仓储接口

  1. using AutofacMVC.IRepository;
  2. using AutofacMVC.Models;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Configuration;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Web;
  10. using Dapper;
  11. using DapperExtensions;
  12.  
  13. namespace AutofacMVC.Repository
  14. {
  15. /// <summary>
  16. ///
  17. /// 创建文件夹Repository 定义UserInfoRepository 实现IUserInfoRepository仓储接口
  18. ///
  19. /// </summary>
  20. public class UserInfoRepository : IUserInfoRepository
  21.  
  22. {
  23. public static string constr = ConfigurationManager.ConnectionStrings["SQLConnection"].ConnectionString;
  24. IDbConnection conn = new SqlConnection(constr);
  25.  
  26. private List<UserInfo> UserInfos = new List<UserInfo>();
  27.  
  28. public List<UserInfo> GetAllList()
  29. {
  30. var list = new List<UserInfo>();
  31. for (int i = ; i < ; i++)
  32. {
  33. list.Add(new UserInfo() { Id = i, UserName = "英文名" + i, Nation = "民族" + i, TrueName = "真实名" + i, LocalAddress = "住址" + i, Gender = i });
  34. }
  35.  
  36. return list;
  37. }
  38.  
  39. /// <summary>
  40. /// 查询所有用户
  41. /// </summary>
  42. /// <returns></returns>
  43. public List<UserInfo> Get_AllList()
  44. {
  45. var list = new List<UserInfo>();
  46. string sql = @"select top(20) UserName,TrueName,Nation,LocalAddress,Birthday,Gender from UserInfo";
  47. //select Id,UserName,Nation,TrueName,Birthday,LocalAddress,Gender from UserInfo
  48. using (SqlConnection conn = new SqlConnection(constr))
  49. {
  50. conn.Open();
  51. //dapper标准写法 写原生sql
  52. // list = conn.Query<UserInfo>(sql,commandType: CommandType.Text).ToList();
  53. //dapper扩展写法 类似EF框架
  54. list = conn.GetList<UserInfo>().ToList();
  55. conn.Close();
  56. }
  57. return list;
  58. }
  59.  
  60. public IEnumerable<UserInfo> GetAll()
  61. {
  62. return UserInfos;
  63. }
  64.  
  65. }
  66. }

5、创建文件夹IRepository 用于存放仓储接口IUserInfoRepository

  1. using AutofacMVC.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace AutofacMVC.IRepository
  9. {
  10. /// <summary>
  11. /// 创建文件夹IRepository 用于存放仓储接口IUserInfoRepository
  12. /// 添加IUserInfoRepository.cs 继承IDependency
  13. /// 我们可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
  14. /// </summary>
  15. public interface IUserInfoRepository : IDependency
  16. {
  17.  
  18. /// <summary>
  19. /// 查询所有用户
  20. /// </summary>
  21. /// <returns></returns>
  22. List<UserInfo> GetAllList();
  23.  
  24. /// <summary>
  25. /// 查询所有用户
  26. /// </summary>
  27. /// <returns></returns>
  28. List<UserInfo> Get_AllList();
  29.  
  30. IEnumerable<UserInfo> GetAll();
  31.  
  32. }
  33. }

6、Controller 这里用构造器注入

  1. using AutofacMVC.IRepository;
  2. using AutofacMVC.Models;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Web;
  7. using System.Web.Mvc;
  8.  
  9. namespace AutofacMVC.Controllers
  10. {
  11. public class UserController : Controller
  12. {
  13. List<UserInfo> UserInfolist = new List<UserInfo>();
  14.  
  15. private IUserInfoRepository _service;
  16. //构造器注入
  17. public UserController(IUserInfoRepository service)
  18. {
  19. this._service = service;
  20. }
  21. //属性注入
  22. // public IUserInfoRepository repository { get; set; }
  23.  
  24. public ActionResult Index()
  25. {
  26. var data = this._service.Get_AllList();
  27. return View(data);
  28. }  
  29.  
  30. }
  31. }

7、index

  1. @model List<AutofacMVC.Models.UserInfo>
  2. @{
  3. ViewBag.Title = "index";
  4. }
  5.  
  6. <h2>index</h2>
  7. <link href="~/Content/bootstrap.css" rel="stylesheet" />
  8. <div class="well">
  9. <table class="table">
  10. <thead>
  11. <tr>
  12. <th>用户名</th>
  13. <th>真实姓名</th>
  14. <th>民族</th>
  15. <th>地址</th>
  16. </tr>
  17. </thead>
  18. <tbody>
  19. @if (Model != null && Model.Any())
  20. {
  21. foreach (var item in Model)
  22. {
  23. <tr>
  24. <td>@item.UserName </td>
  25. <td>@item.TrueName </td>
  26. <td>@item.Nation </td>
  27. <td>@item.LocalAddress </td>
  28.  
  29. </tr>
  30.  
  31. }
  32.  
  33. }
  34. </tbody>
  35.  
  36. </table>
  37. </div>

8、

自动注入

Autofac提供一个RegisterAssemblyTypes方法。它会去扫描所有的dll并把每个类注册为它所实现的接口。既然能够自动注入,那么接口和类的定义一定要有一定的规律。可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。

IRepository在该文件夹增加一个接口类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace AutofacMVC.IRepository
  8. {
  9. /// <summary>
  10. /// Autofac提供一个RegisterAssemblyTypes方法。它会去扫描所有的dll并把每个类注册为它所实现的接口。既然能够自动注入,那么接口和类的定义一定要有一定的规律。我们可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
  11. /// </summary>
  12. public interface IDependency
  13. {
  14. }
  15. }

9、更改IUserInfoRepository.cs 继承IDependency即可   代码已在上面改写

IUserInfoRepository 一一注入的话 该接口文件代码是

  1. using AutofacMVC.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace AutofacMVC.IRepository
  9. {
  10. /// <summary>
  11. /// 创建文件夹IRepository 用于存放仓储接口IUserInfoRepository/// </summary>
  12. public interface IUserInfoRepository
  13. {
  14.  
  15. /// <summary>
  16. /// 查询所有用户
  17. /// </summary>
  18. /// <returns></returns>
  19. List<UserInfo> GetAllList();
  20.  
  21. /// <summary>
  22. /// 查询所有用户
  23. /// </summary>
  24. /// <returns></returns>
  25. List<UserInfo> Get_AllList();
  26.  
  27. IEnumerable<UserInfo> GetAll();
  28.  
  29. }
  30. }

10、注入工作在Global.asax 文件中进行

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Optimization;
  7. using System.Web.Routing;
  8. using Autofac;
  9. using Autofac.Builder;
  10. using Autofac.Integration.Mvc;
  11. using System.IO;
  12. using AutofacMVC.IRepository;
  13. using System.Reflection;
  14. namespace AutofacMVC1
  15. {
  16. public class MvcApplication : System.Web.HttpApplication
  17. {
  18. protected void Application_Start()
  19. {
  20. AreaRegistration.RegisterAllAreas();
  21. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  22. RouteConfig.RegisterRoutes(RouteTable.Routes);
  23. BundleConfig.RegisterBundles(BundleTable.Bundles);
  24.  
  25. #region 自动注入
  26. //创建autofac管理注册类的容器实例
  27. var builder = new ContainerBuilder();
  28. Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
  29. //注册所有实现了 IDependency 接口的类型
  30. Type baseType = typeof(IDependency);
  31. builder.RegisterAssemblyTypes(assemblies)
  32. .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
  33. .AsSelf().AsImplementedInterfaces()
  34. .PropertiesAutowired().InstancePerLifetimeScope();
  35.  
  36. //注册MVC类型
  37. builder.RegisterControllers(assemblies).PropertiesAutowired();
  38. builder.RegisterFilterProvider();
  39. var container = builder.Build();
  40. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  41.  
  42. #endregion
  43.  
  44. #region 手动一个一个的进行注入
  45.  
  46. // //创建autofac管理注册类的容器实例
  47. // var builder = new ContainerBuilder();
  48. // //为这个容器注册它可以管理的类型
  49. // //builder的Register方法可以通过多种方式注册类型。
  50. // builder.RegisterType<UserInfoRepository>().As<IUserInfoRepository>();
  51. // //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册
  52. // builder.RegisterControllers(Assembly.GetExecutingAssembly());//生成具体的实例
  53. // //如果使用属性注入 就把上面这句改为
  54. ////builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); // 这样支持属性注入
  55. // var container = builder.Build();
  56. // //下面就是使用MVC的扩展 更改了MVC中的注入方式.
  57. // DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  58.  
  59. #endregion
  60.  
  61. }
  62. }
  63. }

.NET MVC5+ Dapper+扩展+AutoFac自动注入实现的更多相关文章

  1. ASP.NET MVC Autofac自动注入

    依赖注入容器有很多插件,我用过Unity和Autofac,这两个插件给我最明显的感觉就是Autofac很快,非常的快,毕竟是第三方开发的,而Unity相对而言性能比较稳定 下面附上Autofac自动注 ...

  2. .NET MVC5+ EF+AutoFac自动注入框架

    1.创建一个MVC系统 VIEW显示页面代码: <link href="~/Content/bootstrap.css" rel="stylesheet" ...

  3. .NET MVC5+ Dapper+扩展+微软Unity依赖注入实例

    1.dapper和dapper扩展需要在线安装或者引用DLL即可 使用nuget为项目增加Unity相关的包 2.model类 public class UserInfo { public int I ...

  4. Quartz.Net 与 Autofac 自动注入 的整合问题

    一.问题发现 今天早上在用 Quartz.Net 做定时扫描异常队列的功能模块时,发现处理异常队列的Job里面的ILog对象服务,Autofac没有自动注入进来. 然后在网上查阅相关资料,无奈发现 Q ...

  5. 在ASP.Net Core下,Autofac实现自动注入

    之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题. 于是在 ...

  6. Autofac手动注入及自动注入示例

    参考:http://www.cnblogs.com/xinchuang/archive/2013/05/07/3065433.html#2911661 一.环境 vs2012.mvc4..Net Fr ...

  7. netcore 2.2 使用 Autofac 实现自动注入

    Autofac自动注入是通过名称约定来实现依赖注入 ps:本demo接口层都以“I”开头,以“Service”结尾.服务层实现都以“Service”结尾. 为什么要实现自动注入 大多时候,我们都是 以 ...

  8. Asp.Net MVC 之 Autofac 初步使用2 集成mvc 属性注入以及自动注入

    首先看下Demo2的结构     然后下面一步步将Autofac集成到mvc中. 首先,定义Model Product.cs public class Product { public int Id ...

  9. 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入

    PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.测试仓储层.业务层是否能实现对数据库表的操作 1.在52MVCBlog.IRepository程序集下创建IsysUserInf ...

随机推荐

  1. [解决]java.lang.IllegalArgumentException: Bad level "DEBUG"

    Tomcat启动报错,搞得烦的一比.常规思维就会迷瞪,谁让tomcat的日志级别特殊ne.... http://tomcat.apache.org/tomcat-7.0-doc/ 错误现象: Hand ...

  2. Android中为图标加上数字

    Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等 http://flysnow.iteye.com/blog/906770

  3. #探究# HTTP长连接和短连接

    本文速读: HTTP协议与TCP/IP协议的关系 因TCP协议可靠,所以HTTP通常基于TCP实现 如何理解HTTP协议是无状态的 多次请求之间没有关联关系 什么是长连接.短连接? 每次请求都建立TC ...

  4. 软件公司的两种管理方式 总体来说,这个世界上存在两种不同的软件公司的组织结构。我把他们叫做 Widget Factory(小商品工厂) 和 Film Crews(电影工作组

    软件公司的两种管理方式 一个简单的回答应该是——“因为在我们的社会里,我们总是会认为薪水和会和职位的层次绑在一起”.但是,这个答案同时也折射出一个事实——我们的薪资是基于我们的所理解的价值,但这并没有 ...

  5. C#中缓存的简单方法及使用Sql设置缓存依赖项

    概述 使用Cache高速缓存可以提高数据的读取速度,减少服务器与客户端之间的数据交互.因为Cache一经创建就会占用服务器上的资源,所以Cache并不是越多越好,一般用于数据较固定,使用较频繁的地方. ...

  6. java多线程学习--java.util.concurrent (转载)

    题记:util和concurrent 包是后续重点先看的和学习的模块 原文地址:http://www.cnblogs.com/sunhan/p/3817806.html CountDownLatch, ...

  7. 《JAVA与模式》之装修者模式

    装饰者模式 动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 具体被装饰者和抽象装饰类都继承于抽象被装饰者类,继承的是类型,而不是行为.行为来自装饰者和基础组件,或与其他 ...

  8. jQuery -&gt; 删除/替换DOM元素

    删除 删除操作很easy,直接在结果集后链式调用remove()方法就可以. 比如.要删除下面html脚本中全部的a元素.直接通过 $('a'.remove(); 就能够做到了. <h3> ...

  9. Fuel4d 2.3 公布

    [版本号编号]:Fuel4D 2.3. [公布日期]:2014年10月20日. [编译环境]:UNICODE.VS2010.x86. [开发环境]:ANSI/UTF-8/UNICODE.VS2005/ ...

  10. Sails入门指南

    1.全局观:sails理念,框架结构 2.试用sails的scaffolding工具,创建model,创建controller, 3.启动server,试用blueprint, 4.进阶: 4.0 数 ...