前言
最近看了一些关于Ioc方面的开源项目,里面的类跳来转去,看的迷迷糊糊的。项目里根本不需要这么“复杂的”设计,只需简单完成Ico,达到解耦的目的,并且能高效的完成项目。于是参考autofac的官网及网络资源,写了这篇文章。
入门的坑
在网上很多关于mvc使用autofac的文章,在global.cs中大多都会有这么一句代码:
builder.RegisterControllers
一开始,自己仅是通过nuget引用了autofac,所以怎么也敲不出这个。因此,新入门的小伙半一定要同时引入这两个:
1、Autofac
2、Autofac.mvc5
PS: 这里要注意的是:有很多个版本autofac.mvc,如果安装的版本不对,有可能出现这样的错误:
Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)”时违反了继承安全性规则
这是因为net版本和autofac.mvc版本不兼容导致的。在此demo源码中使用的net4.5.2。
关键代码
1 public class MvcApplication : System.Web.HttpApplication 2 { 3 protected void Application_Start() 4 { 5 AreaRegistration.RegisterAllAreas(); 6 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 7 RouteConfig.RegisterRoutes(RouteTable.Routes); 8 BundleConfig.RegisterBundles(BundleTable.Bundles); 9 10 //配置autofac 11 var builder = new ContainerBuilder(); 12 SetupResolveRules(builder); 13 builder.RegisterControllers(typeof(MvcApplication).Assembly); 14 var container = builder.Build(); 15 DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 16 } 17 private void SetupResolveRules(ContainerBuilder builder) 18 { 19 builder.RegisterType<StudentRepository>().As<IStudentRepository>(); 20 } 21 }
homecontroller 中使用
1 readonly IStudentRepository _studentRepository; 2 public HomeController(IStudentRepository studentRespository) { 3 _studentRepository = studentRespository; 4 } 5 public string Index() 6 { 7 return _studentRepository.SayHello(); 8 }
密码:fj24
希望这篇文章能帮助到大家。谢谢