2017-09-22 3 views
0

Ich habe Klasse:Autofac Registertyp mit Konstruktor

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; 
    } 
} 

wo IOptions ist ein Microsoft.Extensions.Options Art und ILogger ist ein Microsoft.Extensions.Logging Typ. Wie kann ich diesen Typ im Autofac Container mit seinen Parametern registrieren? Ich habe versucht, so etwas wie die:

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

aber ich weiß nicht, was als zweites Argument übergeben.

+0

Sie aus der Vermietung Ihrer Anwendungskomponenten auf 'ioptions hängen ganz verzichtet werden soll ' wie [hier] erklärt (https://simpleinjector.readthedocs.io/en/latest/aspnetintegration.html#working-with-ioption- t). – Steven

+0

Verhindern Sie auch, dass 'ILogger ' injiziert wird und bevorzugen Sie, den viel einfacheren 'ILogger' in Ihre Komponenten zu injizieren. Sie können dies mit einem Autofac.Modul verbinden, wie es [hier] (https://github.com/nblumhardt/autofac-serilog-integration/blob/dev/src/AutofacSerilogIntegration/ContextualLoggingModule.cs) für Serilog gezeigt wird. – Steven

Antwort

2

Sie müssen nur FunctionExtender als IFunctionsExtender registrieren. Autofac löst die entsprechenden Abhängigkeiten für Sie auf. Es ist einer der Aufgaben eines Inversion of Control (IoC) Containers - registrieren, auflösen, freigeben und entsorgen.

Ab Autofac.Extensions.DependencyInjection Version 4.2.0, hier ist alles, was Sie für ASP.Net Core 2 benötigen.

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(); 
} 
Verwandte Themen