.NET MVC5+ EF+AutoFac自动注入框架
1、创建一个MVC系统 VIEW显示页面代码:
<link href="~/Content/bootstrap.css" rel="stylesheet" /> @model List<EFAutofacMVC.Models.TRA_BargainOrder_Test>
@{
ViewBag.Title = "index";
} <div class="well">
<table class="table">
<tr>
<th>订单编号</th>
<th>城市代号</th>
<th>时间</th>
<th>订单状态</th>
</tr>
<tbody>
@if (Model != null && Model.Any())
{
foreach (var item in Model)
{
<tr>
<td>@item.BargainOrderCode </td>
<td>@item.CityCode </td>
<td>@item.UpdateTime </td>
<td>@item.OrderStatus </td> </tr> } }
</tbody> </table>
</div>
2、Controller控制器
using EFAutofacMVC.Models;
using Microsoft.Extensions.Caching.Distributed;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html; namespace EFAutofacMVC.Controllers
{
public class HomeController : Controller
{
/// <summary>
/// 数据库连接
/// </summary>
private readonly DefaultDbContext _DbContext; //构造器注入
public HomeController(DefaultDbContext context)
{ _DbContext = context;
} public ActionResult Index()
{ var data = _DbContext.TRA_BargainOrders.ToList(); return View(data);
} }
}
3、models实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace EFAutofacMVC.Models
{
public class TRA_BargainOrder_Test
{
public int ischeck
{
get; set;
} public long TRA_BargainOrder_TestID
{
get; set;
} /// <summary>
/// 订单编号
/// </summary>
public string BargainOrderCode
{
get; set;
}
/// <summary>
/// 城市代号
/// </summary>
public string CityCode
{
get; set;
} public string ParkUserId
{
get; set;
} public int FlowStatus
{
get; set;
} public DateTime UpdateTime
{
get; set;
} public int OrderStatus
{
get; set;
} public int PayStatus
{
get; set;
} public DateTime CreateTime
{
get; set;
}
public string ExpressCode { get; set; }
/// <summary>
/// 用户ID
/// </summary>
public int UserID { get; set; }
}
}
4、EF数据库连接
using System;
using System.Data.Entity;
namespace EFAutofacMVC.Models
{
public class DefaultDbContext : DbContext,IDependency
{
public DefaultDbContext():base("SQLConnectionString")
{ } /// <summary>
/// 交易订单信息
/// </summary>
public DbSet<TRA_BargainOrder_Test>TRA_BargainOrders{ get; set; } }
}
5、仓储接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFAutofacMVC.IRepository
{ /// <summary>
/// Autofac提供一个RegisterAssemblyTypes方法。它会去扫描所有的dll并把每个类注册为它所实现的接口。既然能够自动注入,那么接口和类的定义一定要有一定的规律。我们可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
/// </summary>
public interface IDependency
{
}
}
6、Global.asax 文件配置
using Autofac;
using Autofac.Integration.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace EFAutofacMVC
{
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 } }
}
7 、其余就是在线安装引用ef以及autofac框架的相关包了
.NET MVC5+ EF+AutoFac自动注入框架的更多相关文章
- ASP.NET MVC Autofac自动注入
依赖注入容器有很多插件,我用过Unity和Autofac,这两个插件给我最明显的感觉就是Autofac很快,非常的快,毕竟是第三方开发的,而Unity相对而言性能比较稳定 下面附上Autofac自动注 ...
- .NET MVC5+ Dapper+扩展+AutoFac自动注入实现
1.首先创建一个MVC项目 定义Model 层 view 层 index.cshtml 控制器层Controllers等文件 2.在线安装或者引用dapper 以及扩展相关包 同时Autofac ...
- Quartz.Net 与 Autofac 自动注入 的整合问题
一.问题发现 今天早上在用 Quartz.Net 做定时扫描异常队列的功能模块时,发现处理异常队列的Job里面的ILog对象服务,Autofac没有自动注入进来. 然后在网上查阅相关资料,无奈发现 Q ...
- .net mvc web api Autofac依赖注入框架-戈多编程
今天自己搭了一套基于三层的依赖注入mvc web api 的依赖注入框架,在此总结下相关配置 1.设置应用程序的.net Framework版本为 4.5 2.通过Nuget 安装autofac包 I ...
- Autofac 依赖注入框架 使用
简介 Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高. 官方网站http://autofac.org/ 源 ...
- Autofac依赖注入框架使用
简介: Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高 控制反转和依赖注入: 控制反转 IOC(Inver ...
- Autofac依赖注入框架
最近使用Autofac框架做项目的依赖注入,感觉挺好用的. 没有深入研究,只是拿来用用,具体可以去官网看看:https://autofac.org/. 这里只是贴一下最近项目的配置: public p ...
- 在ASP.Net Core下,Autofac实现自动注入
之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题. 于是在 ...
- Autofac手动注入及自动注入示例
参考:http://www.cnblogs.com/xinchuang/archive/2013/05/07/3065433.html#2911661 一.环境 vs2012.mvc4..Net Fr ...
随机推荐
- 1388:Lake Counting
题目链接: NOI题库http://noi.openjudge.cn/ch0205/1388/ POJ 2386 http://poj.org/problem?id=2386 总时间限制: 1000m ...
- DialogFragment 监听按键事件的方法(onkeydown)
我们在TV软件开发的时候,会使用DialogFragment,有时候要对它的按键事件进行监听,但是DialogFragment的监听方法和其它的不一样. ...
- qperf测量网络带宽和延迟
原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: qperf测量网络带宽和延迟 我们在做网络服务器的时候,通常会很关心网络的带宽和延迟.因为我们的很多协议都是request-repon ...
- Linux查看GPU使用情况
watch -n 10 nvidia-smi 一.watch watch命令用来定时执行某个程序 二.nvidia-smi nvdia-smi是英伟达自带的GPU监控命令.
- 进阶之路(基础篇) - 021 arduino基础知识
什么是arduino(翻译自arduino官方介绍)Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).她适用于艺术家. ...
- STC单片机串口输出ADXL335角度值
STC单片机串口输出ADXL335角度值: //***************************************************** //名称:单片机串口输出ADXL335角度值 ...
- 【Spring】基于SpringMVC的图片验证码功能实现
后台实现代码: ImgController.java 文件 package cn.shop.controller; import java.awt.Color; import java.awt.Fon ...
- Linux下使用Nexus搭建Maven私服
在开发过程中,有时候会使用到公司内部的一些开发包,显然把这些包放在外部是不合适的.另外,由于项目一直在开发中,这些内部的依赖可能也在不断的更新.可以通过搭建公司内部的Maven服务器,将第三方和内部的 ...
- You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgrou
最近有个同事问我,他工程运行时就会有如下提示,但是不影响功能:You've implemented -[<UIApplicationDelegate> application:didRec ...
- mongoDB 32位 安装包地址
https://www.mongodb.org/dl/win32/i386 http://downloads.mongodb.org/win32/mongodb-win32-i386-3.2.4-si ...