【.NET Core】使用Autofac代替默认依赖注入,批量注入

目录

默认的依赖注入

Autofac

方法一

方法二

方法三

Autofac批量注入


使用.net core 3.1

默认的依赖注入

先看看.NET Core的,默认依赖注入

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddScoped<IUserInfoService, UserInfoService>();
    services.AddScoped<IOrderInfoService, OrderInfoService>();
}

然后在控制器使用即可

public IUserInfoService UserInfoService { get; }

public HomeController(ILogger<HomeController> logger, IUserInfoService userInfoService)
{
    _logger = logger;
    UserInfoService = userInfoService;

    List<UserInfo> userInfos = UserInfoService.GetAll();
}

这样就好了

 

我们可以使用第三方的插件进行依赖注入,例如使用Autofac

Autofac

引入包

Autofac

Autofac.Extensions.DependencyInjection

方法一

在Program中,添加Autofac服务

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

在Startup中添加

public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterType<UserInfoService>().As<IUserInfoService>();
    builder.RegisterType<OrderInfoService>().As<IOrderInfoService>();
}

方法二

新建AutofacModule类,继承Module

public class AutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<UserInfoService>().As<IUserInfoService>();
        builder.RegisterType<OrderInfoService>().As<IOrderInfoService>();
    }
}

同样在Startup中添加

public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterModule(new AutofacModule());
}

然后就可以了

 

方法三

通过json文件配置

还需添加两个包

Autofac.Configuration

Microsoft.Extensions.Configuration.Json

新建Autofac.json文件,记得将文件设置为始终复制

{
  "components": [
    {
      "type": "AutofacTest.BLL.UserInfoService,AutofacTest.BLL",
      "services": [
        {
          "type": "AutofacTest.IBLL.IUserInfoService,AutofacTest.IBLL"
        }
      ],
      "instanceScope": "single-instance",
      "injectProperties": true
    },
    {
      "type": "AutofacTest.BLL.OrderInfoService,AutofacTest.BLL",
      "services": [
        {
          "type": "AutofacTest.IBLL.IOrderInfoService,AutofacTest.IBLL"
        }
      ],
      "instanceScope": "single-instance",
      "injectProperties": true
    }
  ]
}

在Startup中添加

public void ConfigureContainer(ContainerBuilder builder)
{
    IConfigurationBuilder config = new ConfigurationBuilder();

    config.Add(new JsonConfigurationSource() { Path = "Autofac.json" });

    builder.RegisterModule(new ConfigurationModule(config.Build()));
}

 

Autofac批量注入

通过程序集来依赖注入

只要指定程序集路径即可

在Startup中

public void ConfigureContainer(ContainerBuilder builder)
{
    var bllFilePath = System.IO.Path.Combine(AppContext.BaseDirectory, "AutofacTest.BLL.dll");
    builder.RegisterAssemblyTypes(Assembly.LoadFile(bllFilePath)).AsImplementedInterfaces();
}

 

参考:

https://www.cnblogs.com/ingstyle/p/11836157.html

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页