2017-02-20 7 views
1

Ich habe ein paar dynamische Module in meiner Anwendung. Ich habe Einstellungen für jeden von ihnen. Ich möchte die Einstellungen für jedes Modul registrieren, bevor das Modul gestartet wird. Ich habe die InstancePerMatchingLifetimeScope-Methode gefunden, aber ich habe keine Ahnung, wie es funktionieren kann.Autofac InstancePerMatchingLifetimeScope

using System; 
using Autofac; 

public class Program 
{ 
    public static void Main() 
    { 
     var builder = new ContainerBuilder(); 
     builder.RegisterType<Settings1>().InstancePerMatchingLifetimeScope("1").As<ISettings>(); 
     builder.RegisterType<Settings2>().InstancePerMatchingLifetimeScope("2").As<ISettings>(); 

     var container = builder.Build(); 


     using (var lifetimeScope = container.BeginLifetimeScope("1")) 
     { 
      lifetimeScope.Resolve<ISettings>().Run(); 
     } 

     using (var lifetimeScope = container.BeginLifetimeScope("2")) 
     { 
      container.Resolve<ISettings>().Run(); 
     } 
    } 
} 


public interface ILog 
{ 
    void Run(); 
} 

public interface ISettings 
{ 
    void Run(); 
} 

public class Log : ILog 
{ 
    public void Run() 
    { 
     Console.WriteLine("Log"); 
    } 
} 

public class Settings1 : ISettings 
{ 
    public void Run() 
    { 
     Console.WriteLine("Settings1"); 
    } 
} 


public class Settings2 : ISettings 
{ 
    public void Run() 
    { 
     Console.WriteLine("Settings2"); 
    } 
} 

Beispiel https://dotnetfiddle.net/cEw90l

Jemand eine Idee, wie es funktionieren muss?

Antwort

1

Ich habe die Lösung gefunden. https://dotnetfiddle.net/fLZz4E. Mit der BeginLifetimeScope-Methode können neue Registrierungen hinzugefügt werden. Sie können diese Registrierungen in Ihrem Bereich verwenden.

public static void Main() 
{ 
    var builder = new ContainerBuilder();  

    var container = builder.Build(); 


    using (var lifetimeScope = container.BeginLifetimeScope(c => c.RegisterType<Settings1>().As<ISettings>())) 
    { 
     lifetimeScope.Resolve<ISettings>().Run(); 
    } 

    using (var lifetimeScope = container.BeginLifetimeScope(c => c.RegisterType<Settings2>().As<ISettings>())) 
    { 
     lifetimeScope.Resolve<ISettings>().Run(); 
    } 
}