.NET MVC5+ Dapper+扩展+AutoFac自动注入实现

时间:2022-11-11 14:02:09

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自动注入实现的更多相关文章

  1. ASP&period;NET MVC Autofac自动注入

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

  2. &period;NET MVC5&plus; EF&plus;AutoFac自动注入框架

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

  3. &period;NET MVC5&plus; Dapper&plus;扩展&plus;微软Unity依赖注入实例

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

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

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

  5. 在ASP&period;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&period;2 使用 Autofac 实现自动注入

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

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

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

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

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

随机推荐

  1. RHEL7修改swappiness

    linux系统swappiness参数在内存与交换分区间优化 2014-08-14 10:24:19分类: Linux swappiness的值的大小对如何使用swap分区是有着很大的联系的.swap ...

  2. openstack 本地化

    研究了一下 openstack中的本地化:主要使用gettext模块: 其中本地化包括对一般字符串的本地化和log的本地化:   (1) _localedir = os.environ.get('es ...

  3. Bus Pass

    ZOJ Problem Set - 2913 Bus Pass Time Limit: 5 Seconds      Memory Limit: 32768 KB You travel a lot b ...

  4. fatal error LNK1123&colon; 转换到 COFF 期间失败&colon; 文件无效或损坏

    为完成老师的任务,用c++写个计算器,又去学点c++,结果就有各种问题,如题 http://www.cnblogs.com/newpanderking/articles/3372969.html 感谢 ...

  5. 文件和目录之设置用户ID和设置组ID

    与一个进程相关联的ID有6个或更多,它们如表4-4所示: 表4-4 与每个进程相关联的用户ID和组ID 实际用户ID                            我们实际上是谁 实际组ID ...

  6. easyui-prompt弹出框操作

    效果图如下: 代码如下: $(document).ready(function () { //绑定按钮操作 $('#btnMove').click(function () { var ids = ge ...

  7. webservice 发布到外网的时候

    在web.config的<system.web></system.web>中间加入如下配置节内容<webServices>          <protoco ...

  8. &lbrack;置顶&rsqb; Firefox OS 学习——Gaia 编译分析

    Gaia作为用户的接口,也是用户可见部分,一些用户的应用也是安装在这一层,所以研究他是很有必要的,对于像我这样的初学者,最直接的学习方法就是通过修改代码,然后可以看到UI的变化,很直观的观察修改结果. ...

  9. Python初学

    经同学推荐,学习了下Python语言,看Python的介绍,它本身是一个面向对象的解释型脚本语言,我初看到这句话的时候就在想,一个脚本语言还搞成面向对象?有这个必要么?原谅我肤浅了一把. 它还被俗称为 ...

  10. BZOJ&period;4888&period;&lbrack;TJOI2017&rsqb;异或和&lpar;树状数组&rpar;

    BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...