2014-01-08 7 views
0

구성 요소를/후에 구성 요소를 레지스트리에 등록하려고합니다. 이 전 다음과 같은 구성 요소가 있다고 가정 해 봅시다 :구성 요소는 어떻게 다른 구성 요소를 제공합니까?

interface IConfiguration 
{ 
    string SourceDirectory { get; } 
    string TargetDirectory { get; } 

    // other primitive-typed configuration parameters 
} 

class FileConfiguration : IConfiguration 
{ 
    // read parameters from some config file 
} 

class SourceDirectoryWrapper 
{ 
    public byte[] ReadFile(string filename) 
    { 
     // read a file from the source directory 
    } 

    public string Directory { get; set; } 
} 

class TargetDirectoryWrapper 
{ 
    public byte[] WriteFile(string filename) 
    { 
     // write a file into the source directory 
    } 

    public string Directory { get; set; } 
} 

class DirectoryWrapperFactory 
{ 
    public DirectoryWrapperFactory(IConfiguration config) 
    { 
     var source = new SourceDirectoryWrapper { 
      Directory = config.SourceDirectory 
     }; 
     var target = new TargetDirectoryWrapper { 
      Directory = config.SourceDirectory 
     }; 
    } 
} 

구성 요소 FileConfigurationDirectoryWrapperFactory은 평소으로 등록 할 수 있습니다.

그러나 내가 달성하고 싶은 것은 sourcetarget 개체를 DirectoryWrapperFactory에서 만든 것입니다. 기본 개념은 서로 다른 환경에서 서로 다른 구성 제공자가 필요할 수 있다는 것입니다. (그렇지 않더라도, 구성 요소를 읽는 것은 별도의 구성 요소에 넣는 것이 좋습니다.)

또한및 TargetDirectoryWrapper을 IoC 컨테이너에서 관리하고 싶습니다. 필자의 경우 편의상 주로 - 나는 어디서나 필요로하는 EventSource 구현을 가지고 있으므로 속성 autowiring을 사용하여 주입한다. IoC 컨테이너에없는 모든 객체는 명시 적으로 전달해야합니다. 어떤 종류의 버그일까요?

이렇게 : AutoFac에서 가능합니까? 그렇다면 어떻게? 전 라이프 사이클 이벤트에서 찌르지 만 대부분은 객체가 빌드 된 후 레지스트리에 대한 액세스를 허용하지 않습니다.

답변

1

DirectoryWrapperFactory가 필요한 이유를 잘 모르겠습니다. 그것은 그냥 제가 이런 것들의 일부를 등록 할 수 있습니다 실현하지 만든 전적으로 가능하다 .. 내가 EventSourceProxy 구현을 제외한 모든 것을 조립 스캔을 사용하고

builder.Register(c => new SourceDirectoryWrapper { 
     Directory = c.Resolve<IConfiguration>().SourceDirectory 
    }); 

builder.Register(c => new TargetDirectoryWrapper { 
     Directory = c.Resolve<IConfiguration>().SourceDirectory 
    }); 
+0

: 당신은 직접 정상 wireup의 일환으로 SourceDirectoryWrapper 및 TargetDirectoryWrapper을 등록 할 수 있습니다 수동으로. – millimoose

관련 문제