.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 = 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自动注入实现相关推荐
- AutoFac自动注入时报错
错误描述:An error occurred during the activation of a particular registration 解决办法:看到了particular这个单词,用我蹩 ...
- Dapper数据库字段(列)与实体属性名不一致,通过Column特性自动注入映射
一.前言 Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的.Dapper只有一个代码文件,完全开源,你可以放在项 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...
- efcore mysql autofac_Asp.NetCore3.1版本的CodeFirst与经典的三层架构与AutoFac批量注入
Core3.1 CodeFirst与AutoFac批量注入(最下面附GitHub完整 Demo,由于上传网速较慢,这里就直接压缩打包上传了) ===Core3.1 CodeFirst 数据库为远程阿里 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
前言 Hi,大家好,我是Rector 时间飞逝,一个星期又过去了,今天还是星期五,Rector在图享网继续跟大家分享系列文本:一步一步创建ASP.NET MVC5程序[Repository+Autof ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)>,我们完成了: * 引用SqlSugar * ...
- 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...
DI注入在.Net平台是非常流行的, 很多项目都用到了,很多开发人员或多或少也用到DI容器了,感觉DI容器很神奇很厉害.本文将通过百行代码展示DI容器的内部核心代码(包括组件的瞬时生命周期.单利生命周 ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...
- Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
环境 Kubernetes v1.15.6 源码安装 Istio v1.2.5 Helm 安装 Istio v1.2.5 Helm 安装 Istio Helm安装 问题 安装完后,做官方 bookin ...
最新文章
- 自己挖的坑自己填--docker创建实例出现Waiting for SSH to be available…
- C++中了类继承和调用父类的构造函数方法
- HarmonyOS之深入解析Ability的功能和使用
- TVS 管性能及选型总结
- python遥感数据有偿处理_利用python读写tiff遥感影像数据
- 信息学奥赛一本通(1240:查找最接近的元素)
- pycharm在运行TensorFlow时出现如下信息
- webpack中library和libraryTarget详解
- MATLAB人脸识别系统[GUI界面,完美运行,详细解析]
- kali2022安装AWVS
- 开源IT监控系统对比
- Java中用System.getProperty(...)获取系统属性
- linux挂镜像文件作用是什么,linux下挂载iso镜像文件,linux挂载iso镜像文件
- 国产x86服务器芯片,华为、飞腾扛旗,国产服务器芯片有望突破!ARM要替代x86?...
- Mapbox可视化之填色图
- [ROC-RK3568-PC] 手把手教你编译Linux_SDK并打包Ubuntu系统固件
- 在疫情期间微分销商城如何运营
- 电子标签的制作及封装 射频标签通信协议简介 射频标签内存信息的写入方式
- 报错处理 ITK only supports orthonormal direction cosines. No orthonormal definition found
- 1.基于深度学习的知识追踪研究进展_刘铁园
热门文章
- python 中time, datetime的用法
- Notification小案例
- 在Android中通过导入静态数据库来提高应用第一次的启动速度
- 重学数据结构——快速排序,二分法查找
- oracle 定时任务例子【项目例子】
- [技巧]CSS的超级技巧大放送
- 数据库索引的使用及优化
- 【Vue2.0】—默认插槽、具名插槽、作用域插槽(二十四)
- Error: listen EADDRINUSE: address already in use :::5000
- Freeview%20Play是什么