zoukankan      html  css  js  c++  java
  • AutoFac与ASP.NET MVC结合使用

    • MVC下的配置
    1. 通过NuGet安装AutoFac插件:Install-Package Autofac.Mvc5  
    2. 在Global中调用:
    var builder= new ContainerBuilder();
    //注册当前程序集中的所有controller;加上PropertiesAutowired()后,再可以使用属性注入
    builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
    Assembly asmService= Assembly.Load("TestService");
    //在bulider中获取不是抽象类的相关程序集;这块添加PropertiesAutowired()可以让接口调用其他接口,
    //实现接口间属性注入
    builder.RegisterAssemblyTypes(asmService)
    .Where(t => !t.IsAbstract).AsImplementedInterfaces().PropertiesAutowired();
    var container=builder.Build();
    //注册在DepandencyResolver中
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    • MVC下的使用
    1. 为自定义ModelBinder注入,还可以使用builder.RegisterModelBinders()等。

    2. 在Controller中只要声明Service的属性即可,AutoFac会自动完成属性注入

      public class DefaultController : Controller
      {
      public ZSZ.Common.IUserService userService { get; set; }
      // GET: Default
      public ActionResult Index()
      {
        return View();
      }
      }

      并且在ActionFilter中也可以这样使用属性注入

    3. 只有AutoFac创建的对象才有可能进行自动属性的赋值;但是在没有注入的地方,如果想获取对象,可以这样:

    ICityService cityService =DependencyResolver.Current.GetService<ICityService>()


      4. 如果在quartz等单独的线程中,无法通过DependencyResolver.Current.GetService<ICityService>()获取,可以使用

    var container = AutofacDependencyResolver.Current.ApplicationContainer;
    using (container.BeginLifetimeScope())
    {
        cityService = container.Resolve<ICityService>();
    }
  • 相关阅读:
    文件上传漏洞之js验证
    文件上传漏洞靶机upload-labs(1到10)
    URI/URL/URN都是什么
    解压jdk报错gzip: stdin: not in gzip format
    burpsuite常见问题
    C/C++字符串反转的N种方法
    转 二叉树之Java实现二叉树基本操作
    MySQL 面试基础
    转 MySQL中的行级锁,表级锁,页级锁
    MySQL问题排查工具介绍
  • 原文地址:https://www.cnblogs.com/cuijl/p/6694192.html
Copyright © 2011-2022 走看看