zoukankan      html  css  js  c++  java
  • ASP.NET Core搭建多层网站架构【9.1-使用Autofac代替原生的依赖注入】

    2020/01/30, ASP.NET Core 3.1, VS2019, Autofac.Extensions.DependencyInjection 5.0.1

    摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【9.1-使用Autofac代替原生的依赖注入】
    使用Autofac替换原生的依赖注入

    文章目录

    此分支项目代码

    本章节介绍了使用Autofac代替原生的依赖注入,使用Autofac为的是后面配合Castle.Core做AOP动态代理

    添加包引用

    MS.WebApi应用程序中添加Autofac.Extensions.DependencyInjection包:

    <ItemGroup>
      <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="5.0.1" />
    </ItemGroup>
    

    注意此处包和下一章节会用到Autofac.Extras.DynamicProxy包两者需要配合使用,详情看下一章节

    替换DI容器

    修改Program.cs

    打开Program.cs类,给Host.CreateDefaultBuilder(args)添加代码.UseServiceProviderFactory(new AutofacServiceProviderFactory())

    注意需要添加引用:using Autofac.Extensions.DependencyInjection;

    修改Startup.cs

    在Startup类中,注释掉原本的构造函数,并添加以下代码:

    public ILifetimeScope AutofacContainer { get; private set; }
    
    public Startup(IWebHostEnvironment env)
    {
        // In ASP.NET Core 3.0 `env` will be an IWebHostingEnvironment, not IHostingEnvironment.
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }
    //添加autofac的DI配置容器
    public void ConfigureContainer(ContainerBuilder builder)
    {
    
    }
    

    注意要添加using Autofac;引用。

    完成后如下图所示:

    至此,Autofac替换原生依赖注入就完成了,可以在新加的ConfigureContainer方法中使用Autofac的方法注册服务。

    使用

    我们把之前写的IBaseService、IRoleService两个服务改成Autofac注册试试。
    先把之前的注册删掉:

    services.AddScoped<IBaseService, BaseService>();
    services.AddScoped<IRoleService, RoleService>();
    

    在ConfigureContainer中添加以下代码:

    //注册IBaseService和IRoleService接口及对应的实现类
    builder.RegisterType<BaseService>().As<IBaseService>().InstancePerLifetimeScope();
    builder.RegisterType<RoleService>().As<IRoleService>().InstancePerLifetimeScope();
    

    完成后,启动项目,打开Postman测试接口,发现服务都是正常被调用的:

  • 相关阅读:
    js设计模式-迭代器模式
    js设计模式-代理模式
    js设计模式-策略模式
    js设计模式-单例模式
    js设计模式中的高阶函数的一些应用
    深入react技术栈记录(二)
    深入react技术栈记录(一)
    响应式开发(1)
    Angular Js 与bootstrap, angular 与 vue.js
    for in 中的index
  • 原文地址:https://www.cnblogs.com/kasnti/p/12241973.html
Copyright © 2011-2022 走看看