autofac 在MVC中使用的demo
autofac是一个简单很容易上手的net ioc插件。为什么要使用ioc呢?这个可以自行百度,我这边简单的理解就是解除程序之间的耦合度,便于项目维护(鬼知道杂便于啊)
不过现在不知道ioc这东西出去面试是真的掉档次,人家问你们项目啥结构啊。三层,这个算是比较初级的项目结构模式对于小项目来说还能接受。那么你回答说基于ioc依赖注入的多层结构,那么就会提升一个档次。另外在net core里系统自带的类库都是用ioc去实现了。所以这个ioc东西必须要了解下。
按我的理解 ioc也可以叫面向接口编程 首先你先写个接口,然后写过类实现接口,再把实现类和接口类都交给ioc容易。在调用的时候声明接口,让ioc把实现接口类注入进去。
声明个Model
public class UserModel { public int ID { get; set; } public string UserName { get; set; } }
先声明接口
public interface IUserRepositories { List<UserModel> GetList(); }
然后再添加个类实现接口
public class UserRepositories : IUserRepositories { public List<UserModel> GetList() { List<UserModel> list = new List<UserModel>(); for (int i=1;i<=10;i++) { list.Add(new UserModel { ID = i, UserName = "张" + i }); } return list; } }
然后在MVC下用nuget 添加autofac,autofac.mvc5(这个5或者4啥的根据自己的项目版本号来) 插件
然后在global下注册到ioc容器中
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); var builder = new ContainerBuilder(); builder.RegisterType(typeof(UserRepositories)).As(typeof(IUserRepositories)); builder.RegisterControllers(typeof(MvcApplication).Assembly);//注册所有的Controller // builder.RegisterModule<AutofacWebTypesModule>(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } }
然后在HomeController里就可以使用了
public class HomeController : Controller { private readonly IUserRepositories _userRepositories; public HomeController(IUserRepositories userRepositories)//使用构造函数注入 { _userRepositories = userRepositories; } // GET: Home public ActionResult Index() { ViewBag.List = _userRepositories.GetList(); return View(); } }
项目就脱离了new方式