2017-02-20 2 views
1

응용 프로그램에 동적 모듈이 몇 개 있습니다. 각각의 설정이 있습니다. 모듈이 시작되기 전에 각 모듈에 대한 설정을 등록하고 싶습니다. InstancePerMatchingLifetimeScope 메서드를 찾았지만 어떻게 작동하는지 알 수 없습니다. 그것이 작동해야하는 아이디어가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"); 
    } 
} 

https://dotnetfiddle.net/cEw90l

누군가?

답변

1

해결책을 찾았습니다. https://dotnetfiddle.net/fLZz4E. BeginLifetimeScope 메서드를 사용하면 새 등록을 추가 할 수 있으며 범위 내에서 이러한 등록을 사용할 수 있습니다.

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