zoukankan      html  css  js  c++  java
  • 如何在asp.net mvc 中使用Autofac 控制反转(Ioc)

    前言

    最近看了一些关于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     }
    View Code

    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

    希望这篇文章能帮助到大家。谢谢

      

  • 相关阅读:
    jmeter实现上传文件
    jmeter之调度器设置
    存储过程的几种传参方式
    Charles篡改数据
    软件测试职业发展方向
    最近发现一个有意思的lua游戏引擎,名字叫love2d
    2016,新的一年来到。
    Corona手游教程之widget:Slider篇
    Corona手游教程之widget:PickerWheel篇
    Corona手游教程之widget:ProgressView篇
  • 原文地址:https://www.cnblogs.com/liangxiarong/p/8612198.html
Copyright © 2011-2022 走看看