2013-07-15 2 views
1

내 응용 프로그램의 경우 특정 모듈에 대한 설정을로드하고 저장하기 위해 구성 컨트롤러를 작성하려고합니다. 이렇게하려면 INI 파일을 사용합니다. 여기서 섹션 이름은 모듈 이름 (또는 다른 ID)과 키로 표시된 값을 나타냅니다.모듈 이름 또는 ID 얻기

부트 스트 래퍼에 컨트롤러를 등록하고 해당 클래스의 주입을 위해 생성자에서 인터페이스를 사용합니다. 그러나 모듈 이름을 입력하거나 값을 설정해야 할 때마다 모듈 이름을 입력하고 싶지 않으므로 호출자 정보를 사용하여 어떤 모듈 (또는 클래스)이 메서드를 호출하는지 알 수 있었지만 분명히 작동하지 않습니다 (반환 빈 문자열).

내가하려는 일을 성취 할 수있는 또 다른 방법이 있습니까?

부트 스트 래퍼 :

protected override void ConfigureContainer() 
    { 
     base.ConfigureContainer(); 

     Container.RegisterType<IConfig, ConfigController>(new ContainerControlledLifetimeManager()); 
    } 

구성 인터페이스 :

public interface IConfig 
{ 
    string[] GetSettings(string caller = ""); 

    void Set<T>(string setting, T value, string caller = "") where T : class; 
    T Get<T>(string setting, string caller = "") where T : class; 
} 

답변

1

발신자 인수의 사용은 쉬운 오류입니다. 이를 피할 수있는 많은 옵션이 있습니다 :

  1. 각 모듈에 대해 ConfigController를 등록하십시오. Unity는 다중 명명 된 등록을 지원합니다. 당신은 모듈 초기화에서, 또는 Dependency 속성과 각 모듈에 적합한 컨트롤러를 삽입 할 수 있습니다

     Container.Register<IConfig, ConfigController>("module1", 
          new InjectionConstructor("module1")) 
           .Register<IConfig, ConfigController>("module2", 
          new InjectionConstructor("module2")); 
    
         class Module1 { 
          public Module1([Dependency("module1")] IConfig config) {... } 
         } 
    
  2. 은 정의 및 구성 IConfig 구현을 반환하는 IConfigFactory를 구현한다.

    interface IConfigFactory { 
         IConfig Create(String moduleName); 
        } 
    
  3. ConfigController는 모듈 detecting the method the made the call을 식별 할 수 있습니다.

+0

첫 번째 제안을 사용하기로 결정했으며 매력적으로 작동합니다. 여전히 모듈 자체가 아니라 부스트 래퍼에 컨트롤러를 등록하는 방법을 찾고 있지만 초기화하기 전에 DirectoryModuleCatalog에서 모듈을 가져올 수 없습니다. 어쨌든 많은 감사합니다, 이것은 확실히 다시 나를 데려왔다 :) – Kryptoxx

관련 문제