.NET MVC5+ Dapper+扩展+AutoFac自动注入实现
1、首先创建一个MVC项目 定义Model 层 view 层 index.cshtml 控制器层Controllers等文件
2、在线安装或者引用dapper 以及扩展相关包 同时Autofac 的相关包以及 Autofac.Asp.Net.Mvc5 包之类
3、定义Model
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace AutofacMVC.Models
- {
- /// <summary>
- /// 定义Model
- /// </summary>
- public class UserInfo
- {
- public int Id { get; set; }
- public string UserName { get; set; }
- public string Nation { get; set; }
- public string TrueName { get; set; }
- public DateTime Birthday { get; set; }
- public string LocalAddress { get; set; }
- public int Gender { get; set; }
- }
- }
4、 创建文件夹Repository 定义UserInfoRepository 实现IUserInfoRepository仓储接口
- using AutofacMVC.IRepository;
- using AutofacMVC.Models;
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Data;
- using System.Data.SqlClient;
- using System.Linq;
- using System.Web;
- using Dapper;
- using DapperExtensions;
- namespace AutofacMVC.Repository
- {
- /// <summary>
- ///
- /// 创建文件夹Repository 定义UserInfoRepository 实现IUserInfoRepository仓储接口
- ///
- /// </summary>
- public class UserInfoRepository : IUserInfoRepository
- {
- public static string constr = ConfigurationManager.ConnectionStrings["SQLConnection"].ConnectionString;
- IDbConnection conn = new SqlConnection(constr);
- private List<UserInfo> UserInfos = new List<UserInfo>();
- public List<UserInfo> GetAllList()
- {
- var list = new List<UserInfo>();
- for (int i = ; i < ; i++)
- {
- list.Add(new UserInfo() { Id = i, UserName = "英文名" + i, Nation = "民族" + i, TrueName = "真实名" + i, LocalAddress = "住址" + i, Gender = i });
- }
- return list;
- }
- /// <summary>
- /// 查询所有用户
- /// </summary>
- /// <returns></returns>
- public List<UserInfo> Get_AllList()
- {
- var list = new List<UserInfo>();
- string sql = @"select top(20) UserName,TrueName,Nation,LocalAddress,Birthday,Gender from UserInfo";
- //select Id,UserName,Nation,TrueName,Birthday,LocalAddress,Gender from UserInfo
- using (SqlConnection conn = new SqlConnection(constr))
- {
- conn.Open();
- //dapper标准写法 写原生sql
- // list = conn.Query<UserInfo>(sql,commandType: CommandType.Text).ToList();
- //dapper扩展写法 类似EF框架
- list = conn.GetList<UserInfo>().ToList();
- conn.Close();
- }
- return list;
- }
- public IEnumerable<UserInfo> GetAll()
- {
- return UserInfos;
- }
- }
- }
5、创建文件夹IRepository 用于存放仓储接口IUserInfoRepository
- using AutofacMVC.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace AutofacMVC.IRepository
- {
- /// <summary>
- /// 创建文件夹IRepository 用于存放仓储接口IUserInfoRepository
- /// 添加IUserInfoRepository.cs 继承IDependency
- /// 我们可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
- /// </summary>
- public interface IUserInfoRepository : IDependency
- {
- /// <summary>
- /// 查询所有用户
- /// </summary>
- /// <returns></returns>
- List<UserInfo> GetAllList();
- /// <summary>
- /// 查询所有用户
- /// </summary>
- /// <returns></returns>
- List<UserInfo> Get_AllList();
- IEnumerable<UserInfo> GetAll();
- }
- }
6、Controller 这里用构造器注入
- using AutofacMVC.IRepository;
- using AutofacMVC.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- namespace AutofacMVC.Controllers
- {
- public class UserController : Controller
- {
- List<UserInfo> UserInfolist = new List<UserInfo>();
- private IUserInfoRepository _service;
- //构造器注入
- public UserController(IUserInfoRepository service)
- {
- this._service = service;
- }
- //属性注入
- // public IUserInfoRepository repository { get; set; }
- public ActionResult Index()
- {
- var data = this._service.Get_AllList();
- return View(data);
- }
- }
- }
7、index
- @model List<AutofacMVC.Models.UserInfo>
- @{
- ViewBag.Title = "index";
- }
- <h2>index</h2>
- <link href="~/Content/bootstrap.css" rel="stylesheet" />
- <div class="well">
- <table class="table">
- <thead>
- <tr>
- <th>用户名</th>
- <th>真实姓名</th>
- <th>民族</th>
- <th>地址</th>
- </tr>
- </thead>
- <tbody>
- @if (Model != null && Model.Any())
- {
- foreach (var item in Model)
- {
- <tr>
- <td>@item.UserName </td>
- <td>@item.TrueName </td>
- <td>@item.Nation </td>
- <td>@item.LocalAddress </td>
- </tr>
- }
- }
- </tbody>
- </table>
- </div>
8、
自动注入
Autofac提供一个RegisterAssemblyTypes方法。它会去扫描所有的dll并把每个类注册为它所实现的接口。既然能够自动注入,那么接口和类的定义一定要有一定的规律。可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
IRepository在该文件夹增加一个接口类
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace AutofacMVC.IRepository
- {
- /// <summary>
- /// Autofac提供一个RegisterAssemblyTypes方法。它会去扫描所有的dll并把每个类注册为它所实现的接口。既然能够自动注入,那么接口和类的定义一定要有一定的规律。我们可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
- /// </summary>
- public interface IDependency
- {
- }
- }
9、更改IUserInfoRepository.cs 继承IDependency即可 代码已在上面改写
IUserInfoRepository 一一注入的话 该接口文件代码是
- using AutofacMVC.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace AutofacMVC.IRepository
- {
- /// <summary>
- /// 创建文件夹IRepository 用于存放仓储接口IUserInfoRepository/// </summary>
- public interface IUserInfoRepository
- {
- /// <summary>
- /// 查询所有用户
- /// </summary>
- /// <returns></returns>
- List<UserInfo> GetAllList();
- /// <summary>
- /// 查询所有用户
- /// </summary>
- /// <returns></returns>
- List<UserInfo> Get_AllList();
- IEnumerable<UserInfo> GetAll();
- }
- }
10、注入工作在Global.asax 文件中进行
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Optimization;
- using System.Web.Routing;
- using Autofac;
- using Autofac.Builder;
- using Autofac.Integration.Mvc;
- using System.IO;
- using AutofacMVC.IRepository;
- using System.Reflection;
- namespace AutofacMVC1
- {
- public class MvcApplication : System.Web.HttpApplication
- {
- protected void Application_Start()
- {
- AreaRegistration.RegisterAllAreas();
- FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
- RouteConfig.RegisterRoutes(RouteTable.Routes);
- BundleConfig.RegisterBundles(BundleTable.Bundles);
- #region 自动注入
- //创建autofac管理注册类的容器实例
- var builder = new ContainerBuilder();
- Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
- //注册所有实现了 IDependency 接口的类型
- Type baseType = typeof(IDependency);
- builder.RegisterAssemblyTypes(assemblies)
- .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
- .AsSelf().AsImplementedInterfaces()
- .PropertiesAutowired().InstancePerLifetimeScope();
- //注册MVC类型
- builder.RegisterControllers(assemblies).PropertiesAutowired();
- builder.RegisterFilterProvider();
- var container = builder.Build();
- DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
- #endregion
- #region 手动一个一个的进行注入
- // //创建autofac管理注册类的容器实例
- // var builder = new ContainerBuilder();
- // //为这个容器注册它可以管理的类型
- // //builder的Register方法可以通过多种方式注册类型。
- // builder.RegisterType<UserInfoRepository>().As<IUserInfoRepository>();
- // //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册
- // builder.RegisterControllers(Assembly.GetExecutingAssembly());//生成具体的实例
- // //如果使用属性注入 就把上面这句改为
- ////builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); // 这样支持属性注入
- // var container = builder.Build();
- // //下面就是使用MVC的扩展 更改了MVC中的注入方式.
- // DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
- #endregion
- }
- }
- }
.NET MVC5+ Dapper+扩展+AutoFac自动注入实现的更多相关文章
- ASP.NET MVC Autofac自动注入
依赖注入容器有很多插件,我用过Unity和Autofac,这两个插件给我最明显的感觉就是Autofac很快,非常的快,毕竟是第三方开发的,而Unity相对而言性能比较稳定 下面附上Autofac自动注 ...
- .NET MVC5+ EF+AutoFac自动注入框架
1.创建一个MVC系统 VIEW显示页面代码: <link href="~/Content/bootstrap.css" rel="stylesheet" ...
- .NET MVC5+ Dapper+扩展+微软Unity依赖注入实例
1.dapper和dapper扩展需要在线安装或者引用DLL即可 使用nuget为项目增加Unity相关的包 2.model类 public class UserInfo { public int I ...
- Quartz.Net 与 Autofac 自动注入 的整合问题
一.问题发现 今天早上在用 Quartz.Net 做定时扫描异常队列的功能模块时,发现处理异常队列的Job里面的ILog对象服务,Autofac没有自动注入进来. 然后在网上查阅相关资料,无奈发现 Q ...
- 在ASP.Net Core下,Autofac实现自动注入
之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题. 于是在 ...
- Autofac手动注入及自动注入示例
参考:http://www.cnblogs.com/xinchuang/archive/2013/05/07/3065433.html#2911661 一.环境 vs2012.mvc4..Net Fr ...
- netcore 2.2 使用 Autofac 实现自动注入
Autofac自动注入是通过名称约定来实现依赖注入 ps:本demo接口层都以“I”开头,以“Service”结尾.服务层实现都以“Service”结尾. 为什么要实现自动注入 大多时候,我们都是 以 ...
- Asp.Net MVC 之 Autofac 初步使用2 集成mvc 属性注入以及自动注入
首先看下Demo2的结构 然后下面一步步将Autofac集成到mvc中. 首先,定义Model Product.cs public class Product { public int Id ...
- 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入
PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.测试仓储层.业务层是否能实现对数据库表的操作 1.在52MVCBlog.IRepository程序集下创建IsysUserInf ...
随机推荐
- [解决]java.lang.IllegalArgumentException: Bad level "DEBUG"
Tomcat启动报错,搞得烦的一比.常规思维就会迷瞪,谁让tomcat的日志级别特殊ne.... http://tomcat.apache.org/tomcat-7.0-doc/ 错误现象: Hand ...
- Android中为图标加上数字
Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等 http://flysnow.iteye.com/blog/906770
- #探究# HTTP长连接和短连接
本文速读: HTTP协议与TCP/IP协议的关系 因TCP协议可靠,所以HTTP通常基于TCP实现 如何理解HTTP协议是无状态的 多次请求之间没有关联关系 什么是长连接.短连接? 每次请求都建立TC ...
- 软件公司的两种管理方式 总体来说,这个世界上存在两种不同的软件公司的组织结构。我把他们叫做 Widget Factory(小商品工厂) 和 Film Crews(电影工作组
软件公司的两种管理方式 一个简单的回答应该是——“因为在我们的社会里,我们总是会认为薪水和会和职位的层次绑在一起”.但是,这个答案同时也折射出一个事实——我们的薪资是基于我们的所理解的价值,但这并没有 ...
- C#中缓存的简单方法及使用Sql设置缓存依赖项
概述 使用Cache高速缓存可以提高数据的读取速度,减少服务器与客户端之间的数据交互.因为Cache一经创建就会占用服务器上的资源,所以Cache并不是越多越好,一般用于数据较固定,使用较频繁的地方. ...
- java多线程学习--java.util.concurrent (转载)
题记:util和concurrent 包是后续重点先看的和学习的模块 原文地址:http://www.cnblogs.com/sunhan/p/3817806.html CountDownLatch, ...
- 《JAVA与模式》之装修者模式
装饰者模式 动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 具体被装饰者和抽象装饰类都继承于抽象被装饰者类,继承的是类型,而不是行为.行为来自装饰者和基础组件,或与其他 ...
- jQuery -> 删除/替换DOM元素
删除 删除操作很easy,直接在结果集后链式调用remove()方法就可以. 比如.要删除下面html脚本中全部的a元素.直接通过 $('a'.remove(); 就能够做到了. <h3> ...
- Fuel4d 2.3 公布
[版本号编号]:Fuel4D 2.3. [公布日期]:2014年10月20日. [编译环境]:UNICODE.VS2010.x86. [开发环境]:ANSI/UTF-8/UNICODE.VS2005/ ...
- Sails入门指南
1.全局观:sails理念,框架结构 2.试用sails的scaffolding工具,创建model,创建controller, 3.启动server,试用blueprint, 4.进阶: 4.0 数 ...