簡體   English   中英

具有構造函數的Autofac寄存器類型

[英]Autofac register type with constructor

我有課:

public class FunctionExtender : IFunctionsExtender
{
  private static IOptions<Settings> _settings;       
  private static ILogger<FunctionExtender> _logger;

  public FunctionExtender(IOptions<Settings> settings, ILogger<FunctionExtender> logger)
  {
    _settings = settings;
    _logger = logger;
  }
}

其中IOptionsMicrosoft.Extensions.Options類型,而ILoggerMicrosoft.Extensions.Logging類型。 如何在帶有參數的Autofac容器中注冊此類型? 我嘗試過這樣的事情:

var container = new ContainerBuilder();
container.Populate(services);
container.RegisterType<FunctionExtender>()
                .WithParameter(new TypedParameter(typeof(IOptions<Settings>), ???));

但我不知道第二個論點該如何傳遞。

您只需要將FunctionExtender注冊為IFunctionsExtender Autofac將為您解決適當的依賴項。 這是控制反轉(IoC)容器的工作之一-注冊,解析,釋放和處置。

Autofac.Extensions.DependencyInjection Version 4.2.0 ,這是ASP.Net Core 2所需的全部。

public class Startup
{
   public void ConfigureServices(IServiceCollection services)
   {
      ...
      services.AddMvc();
      ...
   }

   public void ConfigureContainer(ContainerBuilder builder)
   {
      builder.RegisterType<FunctionExtender>().As<IFunctionsExtender>();
   }
}

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureServices(services => services.AddAutofac()) <======
            .UseStartup<Startup>()
            .Build();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM