2012-12-16 6 views
2

구조용 맵 또는 자동 완성 기능을 사용하여 연결하려고하는 클래스가 있습니다. 어떤 컨테이너를 사용하고 있는지 정하지 않았습니다. .StructureMap/Autofac : web.config 설정을 기반으로 개체를 만드는 방법

public class ConfigurationReader { 
    private string _filePath; 
    public ConfigurationReader(string filePath){ 
    this._filePath = filePath; 
    } 
    public IList<Baz> ListStuff(){ 
    //do something with _filePath; 
    } 

} 

이 응용 프로그램은 어떻게 구성되어 있는지에 따라이 클래스의 인스턴스가 1..N됩니다 (의 Web.config 파일의 구분 된 목록이 포함됩니다). ConfigurationReader 인스턴스를 생성 할 수 있도록 IoC 컨테이너에서 확장 점을 찾고 있습니다.

답변

1

글쎄, AutoFac에서는 각자를 컨테이너에 등록 할 수 있습니다 (예 : Application_Start).

모든 구성을 읽어야 할 때마다 IEnumerable<ConfigurationReader> (또는 인터페이스를 추출하기로 결정한 경우 IConfigurationReader)에 종속성을 추가 할 수 있으며 모든 구성을 제공 할 수 있습니다. 이 같은

뭔가 : 당신이 인터페이스를 추출 할 경우

var builder = new ContainerBuilder(); 
foreach(var file in ConfigurationManager.AppSettings[yourKey].Split(',')) 
{ 
    var fileName = file; 
    builder.Register(c => new ConfigurationReader(fileName)); 
} 
DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build())); 

는, 당신은뿐만 아니라 마지막에 .AsImplementedInterfaces() 또는 .As<IConfigurationReader>()을 추가하여 등록 할 수 있습니다.

+0

* 생각해보십시오. * foreach 루프의 변수에 액세스하는 람다와 관련된 버그가 있습니다. –

+0

당신은 정확합니다, prob는 로컬 참조를 위해 변경해야합니다. 내가 바꿀거야. –

+0

좋아 보인다. –

관련 문제