Autofac-Laufzeitparameter

Ich bin neu in Autofac und suche nach den Best Practices für die Übergabe von Laufzeitwerten an den Konstruktor. Ich habe eine Reihe von Stackoverflow-Fragen gelesen, in denen dies gestellt wird, aber keine vollständig ausgearbeitet sind. Sollten wir Delegierte, eine Fabrik zur Erstellung von Diensten usw. einsetzen, ist es meines Wissens nicht der beste Weg, dies zu erreichen.

In meinem speziellen Fall habe ich einen Dienst, der auf mehrere Abhängigkeiten zugreift, z. B. Protokollierung, Datenprovider usw. Neben den wenigen übergebenen Diensten habe ich auch Laufzeitparameter, die ich erfassen muss, z. B. Benutzer-ID, Kennwort. Die Benutzer-ID und das Kennwort sind für SomeService erforderlich und werden nachgeschlagen, wenn ein Web-Viewer eine bestimmte Aktion ausführt. Nachstehend habe ich das Problem dargestellt und hervorgehoben.

public class SomeService : ISomeService
{
    private readonly IDataProvider _dataProvider;
    private readonly ILog _log;
    private readonly string _username;  
    private readonly string _password;

    public SomeService(IDataProvider dataProvider, ILog log,
        string username, string password)
    {
      _dataProvider = dataProvider;
      _log = log;
      _username = username;
      _password = password;
    }
}

Der Datenprovider und das Protokoll werden in Autofac konfiguriert

builder.RegisterType<DataProviderService>().As<IDataProvider>()
builder.RegisterType<SomeLogService>().As<ILog>()

Die meisten Funktionen dieses "SomeService" erfordern einen Benutzernamen und ein Kennwort, die vor dem Ausführen von Aufgaben überprüft werden müssen. Es ist daher empfehlenswert, diese beim Erstellen an den Konstruktor zu übergeben, ohne die Laufzeitanforderungen für Autofac zu berücksichtigen. Ich habe die Frage überprüftAutofac - Auflösen von Laufzeitparametern, ohne den Container herumreichen zu müssen und es scheint nah an dem zu sein, was ich brauche, aber ich brauche noch mehr Feedback, wie ich das am besten erreichen kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage