.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 ...
随机推荐
- 3299 有序数组合并求第K大问题
题目描述 Description 给出两个有序数组A和B(从小到大有序),合并两个有序数组后新数组c也有序,询问c数组中第k大的数 假设不计入输入输出复杂度,你能否给出一个O(logN)的方法? 输入 ...
- 软件申请获取root权限
申请root的工具类 //获取root权限 RootManager manager=new RootManager(); manager.upgradeRootPermission(getPack ...
- (原)torch中threads的addjob函数使用方法
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6549452.html 参考网址: https://github.com/torch/threads#e ...
- JavaScript Window Location 当前页面的地址
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面. Window Location window.location 对象在编写时可不使用 window ...
- Java读写TXT文本
public String readTxtFile(String filePath) { StringBuffer appInfolistInput = new StringBuffer(); try ...
- Redis学习之路(004)- 报错及问题
在i配置编译的过程中,遇到一下问题: 1. /redis_test: error while loading shared libraries: libhiredis.so.0.13: cannot ...
- 树莓派进阶之路 (003) - Raspberry Pi(树莓派)国内软件源
树莓派自带的软件源是 deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi 由于网站在国外 ...
- Linux操作系统中文件结构stat中st_size的说明以及对于文件中洞(Holes)的理解
文件stat结构体中st_size成员 对于所有的文件类型,st_size成员对其中的普通文件.目录以及符号链接有实在的意义.其中,对于普通文件而言,st_size记录了该文件的实际大小:对于目录而言 ...
- wxml解析
一.数据绑定 wxml中的动态数据均来自于对应js文件中的Page的data,在js中访问Page的data用this.data, 改变data中某个属性的值用setData()方法. Page({ ...
- 【转】我离开了 Coverity
我离开了 Coverity 在写这篇博文的时候,我已经不再是 Coverity 的员工了,我已经在今天下午向公司正式辞职. 走出公司的大门,我觉得一身的轻松.这是我几个月以来第一次感受到加州美丽的阳光 ...