【.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章