1.安装Autofac

在Package Manager Console执行如下命令:

Install-Package Autofac
Install-Package Autofac.Mvc5

2.追加Model(Models.Movie)

using System.Data.Entity;

namespace FirstDenpendencyInjection.Models
{
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
public int ReleaseYear { get; set; }
public int RunTime { get; set; }
} public class MovieDb : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}

3.追加Controller和View

右键Controllers目录,Add Controller;

4.追加Repository的接口和类

IMovieRepository(Repositories.Inaterface)

using FirstDenpendencyInjection.Models;
using System.Collections.Generic; namespace FirstDenpendencyInjection.Repositories.Inaterface
{
public interface IMovieRepository
{
List<Movie> GetMovies(); Movie GetMovie(int id); int Insert(Movie movie); int Update(Movie movie); int Delete(int id);
}
}

MovieRepository(Repositories)

using FirstDenpendencyInjection.Models;
using FirstDenpendencyInjection.Repositories.Inaterface;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq; namespace FirstDenpendencyInjection.Repositories
{
public class MovieRepository : IMovieRepository
{ private MovieDb db = new MovieDb(); public int Delete(int id)
{
Movie movie = db.Movies.Find(id);
db.Movies.Remove(movie);
return db.SaveChanges();
} public Movie GetMovie(int id)
{
return db.Movies.Find(id);
} public List<Movie> GetMovies()
{
return db.Movies.ToList();
} public int Insert(Movie movie)
{
db.Movies.Add(movie);
return db.SaveChanges();
} public int Update(Movie movie)
{
db.Entry(movie).State = EntityState.Modified;
return db.SaveChanges();
}
}
}

5.修改MoviesController类

using FirstDenpendencyInjection.Models;
using FirstDenpendencyInjection.Repositories.Inaterface;
using System.Net;
using System.Web.Mvc; namespace FirstDenpendencyInjection.Controllers
{
public class MoviesController : Controller
{
//private MovieDb db = new MovieDb(); private IMovieRepository _repository; public MoviesController(IMovieRepository repo) {
_repository = repo;
} // GET: Movies
public ActionResult Index()
{
return View(_repository.GetMovies());
} // GET: Movies/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = _repository.GetMovie(id.Value);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
} // GET: Movies/Create
public ActionResult Create()
{
return View();
} // POST: Movies/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Title,ReleaseYear,RunTime")] Movie movie)
{
if (ModelState.IsValid)
{
_repository.Insert(movie);
//db.Movies.Add(movie);
//db.SaveChanges();
return RedirectToAction("Index");
} return View(movie);
} // GET: Movies/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = _repository.GetMovie(id.Value);// db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
} // POST: Movies/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Title,ReleaseYear,RunTime")] Movie movie)
{
if (ModelState.IsValid)
{
_repository.Update(movie);
//db.Entry(movie).State = EntityState.Modified;
//db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
} // GET: Movies/Delete/5
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = _repository.GetMovie(id.Value);// db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
} // POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
_repository.Delete(id);
//Movie movie = db.Movies.Find(id);
//db.Movies.Remove(movie);
//db.SaveChanges();
return RedirectToAction("Index");
} protected override void Dispose(bool disposing)
{
//if (disposing)
//{
// db.Dispose();
//}
base.Dispose(disposing);
}
}
}

6.注册组件(Global.asax)

using Autofac;
using Autofac.Integration.Mvc;
using FirstDenpendencyInjection.Controllers;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace FirstDenpendencyInjection
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); // 注册组件
var assembly = Assembly.GetExecutingAssembly();
var builder = new ContainerBuilder(); // 注册单个实例
//builder.RegisterInstance(new MovieRepository()).As<IMovieRepository>();
builder.RegisterType<MoviesController>(); // 扫描assembly中的组件(类名以Repository结尾)
builder.RegisterAssemblyTypes(assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces(); IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
}

【MVC5】使用Autofac实现依赖注入的更多相关文章

  1. NopCommerce使用Autofac实现依赖注入

    NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...

  2. Autofac之依赖注入

    这里主要学习一下Autofac的依赖注入方式 默认构造函数注入 class A { public B _b; public A() { } public A(B b) { this._b = b; } ...

  3. Web API(六):使用Autofac实现依赖注入

    在这一篇文章将会讲解如何在Web API2中使用Autofac实现依赖注入. 一.创建实体类库 1.创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: us ...

  4. NET Core源代码通过Autofac实现依赖注入

    查看.NET Core源代码通过Autofac实现依赖注入到Controller属性   阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Cor ...

  5. 转 Autofac怎么依赖注入ASP.NET MVC5类的静态方法

    之前我有介绍过怎么在ASP.NET mvc5中实现的Controller的依赖注入.一般是通过Contrller的构造函数的参数或者属性来注入,但是这有一个共同点就是调用这个类的方法一般都是实例方法, ...

  6. 【AutoFac】依赖注入和控制反转的使用

    在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的 ...

  7. 使用AutoFac实现依赖注入

    1.基本使用 1.1新建MVC项目并安装Autofac 注意需要安装AutoFac和AutoFac.mvc5 Install-Package Autofac Install-Package Autof ...

  8. 查看.NET Core源代码通过Autofac实现依赖注入到Controller属性

    一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServi ...

  9. WebAPi使用Autofac实现依赖注入

    WebAPi依赖注入  使用记录 笔记 1.NuGet包安装 2.控制器加入构造函数 3.Global.asax  ----Application_Start 应用程序启动时 using Autofa ...

  10. Autofac 泛型依赖注入

    using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...

随机推荐

  1. 高级数据查询SQL语法

    接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL语法, ...

  2. poj2728 最小比率生成树——01分数规划

    题目大意: 有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水, 只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差, 现在要求方案使得费用与距离的比值最小,很显然 ...

  3. tortoise git使用 git版本库的rsa key来进行ssh连接

    接触git以来 ,开始时用了命令行,但是命令行总归不如图形化菜单方便明了,而GIT本身自带的GUI又用的不习惯,以前用过许久的TOTORISE SVN,幸好有TORTOISE GIT,这个版本图形化工 ...

  4. Windows ToolTips简要介绍(转)

    原文转自 https://blog.csdn.net/sesiria/article/details/77450151 Windows 标准控件ToolTips简要介绍 参考文档 MSDN https ...

  5. How do I list all fields of an object in Objective-C?

    http://stackoverflow.com/questions/1213901/how-do-i-list-all-fields-of-an-object-in-objective-c As m ...

  6. 华为上机测试题(Excel表格纵列字母数字转换-java)

    PS:这是我刚做的一道题,题目不难,满分60,得分40,大家看看哪里有问题,欢迎提意见,感谢! /* * 题目:Excel表格纵列字母数字转换 * 描述: 在Excel中列的编号为A-Z,AA-AZ, ...

  7. C和C++的关键字区别

    c中数据类型是struct ,c++中可以是struct,也可以是class关于c++中<< 和>>分别是箭头往那边就是流向哪里的 比如cout<<这个就是流向屏幕 ...

  8. python的递归算法学习(1)

    递归函数在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以 ...

  9. poj 3348(凸包面积)

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8063   Accepted: 3651 Description ...

  10. 【原创】CMD命令设置IP地址

    问题描述 在实际工作中,尤其是像我们这种BI分析人员,在做项目的时候,时常都需要因客户的不同随时切换不同的网络环境,有时可能需要在公司和客户之间来回的穿梭.交替.问题也就随之而来:每次客户那里都需要设 ...