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>();
    }
  • 相关阅读:
    Jquery对象与DOM对象之间的转换
    关于Content-Type中application/x-www-form-urlencoded 和 multipart/form-data的区别及用法
    ${pageContext.request.contextPath} :JSP取得绝对路径方法
    servlet到底是什么?
    get和post的区别
    HTTP请求返回状态码详解
    XMLHttpRequest对象的readyState和status区别
    hdu 3594 仙人掌图
    hdu 4744 最小费用流
    hdu 4729 树链剖分
  • 原文地址:https://www.cnblogs.com/cuijl/p/6694192.html
Copyright © 2011-2022 走看看