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 = 0; i < 10; 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 UserInfousing (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}}
}

转载于:https://www.cnblogs.com/Warmsunshine/p/9067321.html

.NET MVC5+ Dapper+扩展+AutoFac自动注入实现相关推荐

  1. AutoFac自动注入时报错

    错误描述:An error occurred during the activation of a particular registration 解决办法:看到了particular这个单词,用我蹩 ...

  2. Dapper数据库字段(列)与实体属性名不一致,通过Column特性自动注入映射

    一.前言 Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的.Dapper只有一个代码文件,完全开源,你可以放在项 ...

  3. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)

    前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...

  4. efcore mysql autofac_Asp.NetCore3.1版本的CodeFirst与经典的三层架构与AutoFac批量注入

    Core3.1 CodeFirst与AutoFac批量注入(最下面附GitHub完整 Demo,由于上传网速较慢,这里就直接压缩打包上传了) ===Core3.1 CodeFirst 数据库为远程阿里 ...

  5. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)

    前言 Hi,大家好,我是Rector 时间飞逝,一个星期又过去了,今天还是星期五,Rector在图享网继续跟大家分享系列文本:一步一步创建ASP.NET MVC5程序[Repository+Autof ...

  6. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)

    前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)>,我们完成了: * 引用SqlSugar * ...

  7. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...

    DI注入在.Net平台是非常流行的, 很多项目都用到了,很多开发人员或多或少也用到DI容器了,感觉DI容器很神奇很厉害.本文将通过百行代码展示DI容器的内部核心代码(包括组件的瞬时生命周期.单利生命周 ...

  8. ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

    ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...

  9. Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案

    环境 Kubernetes v1.15.6 源码安装 Istio v1.2.5 Helm 安装 Istio v1.2.5 Helm 安装 Istio Helm安装 问题 安装完后,做官方 bookin ...

最新文章

  1. 自己挖的坑自己填--docker创建实例出现Waiting for SSH to be available…
  2. C++中了类继承和调用父类的构造函数方法
  3. HarmonyOS之深入解析Ability的功能和使用
  4. TVS 管性能及选型总结
  5. python遥感数据有偿处理_利用python读写tiff遥感影像数据
  6. 信息学奥赛一本通(1240:查找最接近的元素)
  7. pycharm在运行TensorFlow时出现如下信息
  8. webpack中library和libraryTarget详解
  9. MATLAB人脸识别系统[GUI界面,完美运行,详细解析]
  10. kali2022安装AWVS
  11. 开源IT监控系统对比
  12. Java中用System.getProperty(...)获取系统属性
  13. linux挂镜像文件作用是什么,linux下挂载iso镜像文件,linux挂载iso镜像文件
  14. 国产x86服务器芯片,华为、飞腾扛旗,国产服务器芯片有望突破!ARM要替代x86?...
  15. Mapbox可视化之填色图
  16. [ROC-RK3568-PC] 手把手教你编译Linux_SDK并打包Ubuntu系统固件
  17. 在疫情期间微分销商城如何运营
  18. 电子标签的制作及封装 射频标签通信协议简介 射频标签内存信息的写入方式
  19. 报错处理 ITK only supports orthonormal direction cosines. No orthonormal definition found
  20. 1.基于深度学习的知识追踪研究进展_刘铁园

热门文章

  1. python 中time, datetime的用法
  2. Notification小案例
  3. 在Android中通过导入静态数据库来提高应用第一次的启动速度
  4. 重学数据结构——快速排序,二分法查找
  5. oracle 定时任务例子【项目例子】
  6. [技巧]CSS的超级技巧大放送
  7. 数据库索引的使用及优化
  8. 【Vue2.0】—默认插槽、具名插槽、作用域插槽(二十四)
  9. Error: listen EADDRINUSE: address already in use :::5000
  10. Freeview%20Play是什么