zoukankan      html  css  js  c++  java
  • .netcore3.1——使用Autofac替换系统依赖注入组件

    .netcore内置依赖注入,通过services.AddTransient、services.AddScoped、services.AddSingleton这些方法即可实现构造函数注入。

    Autofac可完美替换系统的依赖注入功能,可实现构造函数注入和属性注入,替换过程:

    1、添加引用:

    2、Program修改:

    1         public static IHostBuilder CreateHostBuilder(string[] args) =>
    2             Host.CreateDefaultBuilder(args)
    3             .UseServiceProviderFactory(new AutofacServiceProviderFactory())//集成Autofac
    4             .ConfigureWebHostDefaults(webBuilder =>
    5             {
    6                 webBuilder.UseStartup<Startup>();
    7             });

    这里就加了一行

    3、Startup修改:

    1         //集成Autofac
    2         public void ConfigureContainer(ContainerBuilder builder)
    3         {
    4             //添加依赖注入实例,AutofacModuleRegister就继承自Autofac.Module的类
    5             builder.RegisterModule(new StartupHelp.AutofacModuleRegister());
    6         }

    这是新加的方法,由Autofac来调用,里面就是注册依赖的地方,此处使用了外置对象来注入

    4、注入实现AutofacModuleRegister如下:

     1     public class AutofacModuleRegister : Autofac.Module
     2     {
     3         protected override void Load(ContainerBuilder builder)
     4         {
     5             //程序集范围注入
     6             builder.RegisterAssemblyTypes(typeof(ManagerService).Assembly)
     7                  .Where(t => t.Name.EndsWith("Service"))
     8                  .AsImplementedInterfaces().PropertiesAutowired();
     9             //单个注册
    10             builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().PropertiesAutowired();
    11 
    12             //在控制器中使用属性依赖注入,其中注入属性必须标注为public
    13             var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()
    14             .Where(type => typeof(Microsoft.AspNetCore.Mvc.ControllerBase).IsAssignableFrom(type)).ToArray();
    15             builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();
    16         }
    17     }

    其中注册类必须继承自Autofac.Module,并且在Load中实现注入,此处应用了程序集范围的注入以及单个对象的注入,最后添加的代码是为了支持控制器的属性注入。

    注入的接口(如IUnitOfWork)和实现(UnitOfWork)没有特别。

    注入对象的生命周期与.netcore内置的一致。

    5、使用,可以通过构造函数注入和属性注入,如下:

    1         public IManagerService _managerService { get; set; }
    2         private readonly ILogger _logger;
    3 
    4         public AccountController(ILogger<AccountController> logger)
    5         {
    6             _logger = logger;
    7         }

    其中_logger使用构造函数注入,_managerService为属性注入(应声明为public)。 

  • 相关阅读:
    java的枚举
    java解析XML的三种方法
    java静态代理
    java注释
    Jquery基础之DOM操作
    sql点滴43—mysql允许用户远程登陆
    js实现复制功能
    MVC ViewData和ViewBag
    Visual Studio 2013 Web开发新特性
    VisualStudio2013快捷键
  • 原文地址:https://www.cnblogs.com/quluqi/p/12720320.html
Copyright © 2011-2022 走看看