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>();
    }
  • 相关阅读:
    内联汇编的使用
    metamask注记词
    一个简单的增删改查合约
    企业邮箱账号
    压缩包管理
    设计模式
    软硬链接ln
    文件IO-Linux
    静态库和动态库
    gdb调试
  • 原文地址:https://www.cnblogs.com/cuijl/p/6694192.html
Copyright © 2011-2022 走看看